我编写了连接到 websocket 服务器、服务器应用程序和 android 应用程序的 android 应用程序Autobahn网络套接字库。
我可以成功连接服务器并与服务器交换消息。但一段时间后(20 - 30 分钟后)Android 应用程序停止与服务器通信(它无法向服务器发送消息)。在 logcat 上显示应用程序仍然连接到 websocket,即使它无法向服务器发送消息。
我浏览了 Autobahn 库的源代码,发现它使用java.nio.channels.SocketChannel连接到 websocket。使用SocketChannels有什么问题吗? (我从这里发现了类似的问题Android - 如何与服务器保持长时间连接 https://stackoverflow.com/questions/9859744/android-how-to-keep-connection-with-server-for-a-long-time)
最后我用websocket解决了这个问题乒乓信息。
其实问题不在于套接字通道,我尝试过简单的Socket而不是使用 SocketChannel。即使使用了问题也没有解决Socket.
这是我用过的方法...
为了保持 websocket 连接处于活动状态,我们需要使用 websockt 协议内置支持的 Ping/Pong 消息(更多信息网络套接字协议 http://appwebserver.org/products/appweb/doc-4.3/guide/appweb/users/webSockets.html)。服务器需要发送ping定期向客户发送消息。当 ping 从服务器收到时,客户端回复它pong信息。使用这种方式我们可以长时间保持连接。
我用来构建支持此 ping/pong 消息的 webscoket 客户端的 Autobahn 库。当通过 websocket 接收到 ping 消息时,库会自动向服务器发送 pong 消息。所以我们不需要担心手动发送pong消息。您可以从此处找到 ping/pong 消息的高速公路实现(在创建处理程序()方法 -高速公路 ping/pong 实施 https://github.com/tavendo/AutobahnAndroid/blob/master/Autobahn/src/de/tavendo/autobahn/WebSocketConnection.java)
您也可以从此线程中获取有关此主题的更多详细信息网络套接字。失去互联网、保持活动消息、应用程序架构等 https://stackoverflow.com/questions/8758667/websockets-loss-of-internet-keep-alive-messages-app-architecture-etc
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)