【发布时间】:2015-08-13 09:05:45
【问题描述】:
我想将Service 添加到我的Android 应用程序中,该应用程序在后台运行并持有WebSocket 连接(可能需要几个小时甚至几天)并定期向服务器发送一些数据。
现在似乎有一堆用于 Java 的 WebSocket 库,我不确定应该使用哪个:
TooTallNate/Java-WebSocket 来自 GitHub 的描述:用 100% Java 编写的准系统 WebSocket 客户端和服务器实现。 http://java-websocket.org/ -- 这个链接在my first result of googling "android websocket"。但是,它有很多未解决的问题,尤其是关于 SSL 连接,而且目前似乎没有得到积极维护。
koush/AndroidAsync 来自 GitHub 的描述:异步套接字、http(客户端+服务器)、websocket 和 android 的 socket.io 库。基于 nio,而不是线程。 -- 还有许多未解决的问题,但似乎正在积极维护/处理。
Project Tyrus 来自网站的描述:JSR 356: Java API for WebSocket - 参考实现 -- 这是甲骨文制作的。不确定它是否适用于 Android。
Jetty WebSocket Client API 来自网站的信息:Jetty 还提供了一个 Jetty WebSocket 客户端库来编写使与 WebSocket 服务器的对话更容易。 -- 再说一遍:不确定它是否适用于 Android。
codebutler/android-websockets 来自 GitHub 的描述:适用于 Android 的 Bare minimum websockets (hybi13/RFC) 客户端 -- 这个在schwiz/android-websocket-example中使用,这是StackOverflow问题“How to make the Android device hold a TCP connection to Internet without wake lock?”的公认答案。
Atmosphere/wasync 来自 GitHub 的描述:带有后备传输客户端库的 WebSockets 用于 Node.js、Android 和 Java http://async-io.org
TakahikoKawasaki/nv-websocket-client 来自 GitHub 的描述:Java 中的高质量 WebSocket 客户端实现。
square/okhttp 来自 GitHub 的描述:Android 和 Java 应用程序的 HTTP+SPDY 客户端。 http://square.github.io/okhttp/ --
它有一个Websocket module。作为mentioned by scorpiodawg,OkHttp 从 3.5 版本开始就内置了 websocket 支持。firebase/TubeSock 来自 GitHub 的描述:用 Java 实现的 WebSocket 客户端库
Autobahn|Android (GitHub) 来自网站的描述:Autobahn|Android 是一个用于 Java/Android 的开源网络库,由 Autobahn 项目创建,它实现了 WebSocket 协议和 Web 应用程序消息传递协议 (WAMP),用于创建本地移动 WebSocket/WAMP 客户端。 -- cloudsurfin pointed out 不支持wss。
另外还有一个原生的socket.ioAndroid客户端库:
- nkzawa/socket.io-client.java 来自 GitHub 的描述:用于 Java 的全功能 Socket.IO 客户端库,兼容 Socket.IO v1.0 及更高版本。
使用 socket.io Android 客户端对我来说很方便,因为无论如何我都计划将 nodejs/socket.io 用于 Web 前端。但是本地客户端还很年轻,并且有几个未解决的问题。除此之外,据我了解,android 应用程序没有任何使用 socket.io 客户端库的好处(除了与 socket.io 1.0 服务器兼容),因为可以在客户端确保 WebSocket 支持.
我的要求如下:
- 与 Android API 9 及更高版本的兼容性
- 可以通过 SSL 连接
- 无需持有永久唤醒锁即可长时间保持连接
- 与可用的 nodejs websocket 服务器实现或与 socket.io 的兼容性
有什么建议适合这些需求的库吗?
【问题讨论】:
-
也许是Atmosphere。见this Question。
-
仅供参考,高速公路就在那里,他们有一个华丽的网站。但是在您花时间安装并尝试运行它之前,不会注意到“未实现安全 WebSockets”。下一步。
-
我没有足够的声誉来发表评论,因此我将其写为答案,因为我已经完成了您在问题中提到的相同要求,并且 okhttp 帮助我满足了所有要求。从 3.5 版本开始就支持 web sockets,所以使用 okHttp(web service calls + web sockets support)是一个额外的优势。这是开始的链接。 medium.com/@ssaurel/…>
-
这样的问题不应该被关闭。