2

我编写了连接到 websocket 服务器、服务器应用程序和使用Autobahn websocket 库实现的 android 应用程序的 android 应用程序。

我可以成功连接并与服务器交换消息。但一段时间后(20-30 分钟后)android 应用程序停止与服务器通信(它无法向服务器发送消息)。在 logcat 上显示应用程序仍然连接到 websocket,即使它无法向服务器发送消息。

我浏览了 Autobahn 库的源代码,发现它使用java.nio.channels.SocketChannel连接到 websocket。使用 SocketChannels 有什么问题吗?(我在这里发现了类似的问题Android - How to keep connection with server for a long time

4

1 回答 1

2

最后我通过使用 webscoket ping/pong消息解决了这个问题。

实际上问题不在于SocketChannel,我尝试使用普通Socket而不是使用 SocketChannel。即使使用Socket也无法解决问题。

这是我使用的方法...

为了让 websocket 连接保持活跃,我们需要使用内置支持 websockt 协议的 Ping/Pong 消息(更多信息websocket 协议)。服务器需要定期向客户端发送ping消息。当 ping 从服务器接收到时,客户端用pong消息回复它。使用这种方式,我们可以在 ling 时间内保持连接处于活动状态。

我用来构建我的 webscoket 客户端支持此 ping/pong 消息的 Autobahn 库。当通过 websocket 接收到 ping 消息时,库会自动将 pong 消息发送到服务器。所以我们无需担心手动发送 pong 消息。您可以从此处找到 ping/pong 消息的高速公路实现(在createHandler()方法中 -高速公路 ping/pong 实现

您可以从这个线程以及Websockets 获得有关此主题的更多详细信息。互联网丢失、保持活动消息、应用程序架构等

于 2014-02-14T06:47:58.637 回答