连接iOS和Android客户端到SockJS后端

31
我正在使用Spring WebSockets开发WebSocket消息后端,它使用SockJS + STOMP协议。之所以不使用普通的WebSocket是因为我需要利用Spring WebSockets中SockJS提供的安全集成以及其他很棒的SockJS功能,例如rooms、subscriptions等。我想知道这是否是一个好的选择,以便移动(iOS和Android)和Web客户端应用程序可以轻松连接到后端服务器并执行消息传递。如果是的话,那么我可以使用什么库来进行iOS和Android开发。

SockJS GitHub页面上,他们列出了可用的客户端库,但没有iOS或Android。因此,我在想是否值得使用SockJS。
我发现iOS客户端Primus-ObjcGitHub页面)库声称可以连接本机WebSockets、Socket.IO、SockJS或者engine.io。这是真的吗?即使是真的,那这个库的质量如何呢?
如果在后台使用SockJS也可以,那么是否可能提供iOS和Android的示例代码,以便我可以在移动设备上进行概念验证?
如果SockJS对我来说不是一个好选择,那么使用Socket.io + Node.js(使用JavaScript)构建我的消息应用程序会更好吗?对我来说,Socket.io似乎具有iOS(Socket.IO官方库)和Android(Socket.IO官方库)所需的所有客户端库。

另一个选择是使用Netty-Socket.io库并手动构建每个端点,而不使用Spring Framework(我正在考虑使用它),但是存在一个小挑战,那就是安全性。 实际上已经有人尝试过同一作者在官方Netty-Socket.IO Github页面上发问),但看起来他还没有成功解决。


请参考这篇博客文章:http://www.elabs.se/blog/66-using-websockets-in-native-ios-and-android-apps。 - Durgesh Patel
另外,请查看 https://github.com/elabs/mobile-websocket-example。 - Durgesh Patel
1
为什么不直接使用 CometD 呢?它也支持 Android… - We are Borg
如果您需要相关的cometd代码,请告诉我。我的项目中有cometd实现。 - We are Borg
@Maksim 1. 你是否在使用Spring Boot和Socket IO,你是如何实现Android客户端、iOS客户端与Spring服务器通信的。2. 为了设置你的Socket IO,你是否创建了一个Node.js Socket服务器。3. 你是否实现了一个Spring Boot的Java客户端。 - Oto-obong Eshiett
显示剩余2条评论
4个回答

18

也许这个问题已经被提出一年以上了。但是,因为在搜索SockJS+Android时它出现在第一个结果中。所以我回答一下。

根据我最近参与的项目经验,我们能够使用一个STOMP客户端 - 像这里 - 从本地Android应用连接到Spring Websocket后端。

而从浏览器访问,则依旧可以使用SockJS客户端来实现跨浏览器兼容性和回退功能。

需要注意的是,当仅使用STOMP客户端连接到本地websocket时,URL将会类似于ws://mydomain/SockJSEndpoint/websocket;而从浏览器使用SockJS客户端,则URL将会类似于http://mydomain/SockJSEndpoint。


2
谢谢你分享这个! - Stefan Ciprian Hotoleanu
1
哇,非常感谢!我花了好几天时间才找到Spring Boot应用程序上正确的WebSocket端点。当我尝试在Android中实现自己的WebSocket+STOMP库时,无法在任何文档中找到添加“/websocket”的信息! - wlays
假设你不能使用那些库,那么有没有可能通过 ws://... 连接并构建 STOMP 帧,只使用纯 WebSocket 而不使用任何库呢? - ata

5

1
有没有SockJS和iOS互相通信并且用户已经通过身份验证的示例? - Maksim
链接#1是与链接#3中源代码相关的博客文章。他们仅在那里进行了简单的“Hello World”示例。在链接#2中,他们建议使用一些第三方SDK。需要与SockJS、移动设备和Stomp协议相关的具体官方内容。 - Maksim

2
我们已经测试过它们了,Android客户端(link)由@Amr K. Ismail提供,而这个iOS客户端(link)适用于具有STOMP的Spring-SockJS服务器。

0

SockJS 可能很有趣,因为它提供了非 ws 传输。在某些情况下,仅使用 WebSockets 可能不太可能。

有一个跨平台的 SockJs 客户端 OpenFL 项目

https://github.com/jeremyfa/openfl-sockjs

尚未测试其工作效果,但至少对于Android而言,它使用的是WebView内部的JavaScript,因此与JavaScript应该没有什么不同。再次强调,目前还不清楚它与OpenFL的耦合程度,但使用WebView和标准的SockJS客户端的方法可能可以被重复利用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接