Android - 如何与服务器保持长时间连接

Sep*_*oth 3 android chat socketchannel

我使用 SocketChannel 为 Android 编写了一个聊天应用程序。它与服务器成功连接并且所有功能都正常工作。但是在我登录后很长时间(大约 2-3 小时)后,我尝试再次发送聊天消息,但失败了。在日志文件中,SocketChannel,选择器仍然打开并连接到服务器,消息已经写入成功。有什么问题?我错过了什么?

在此先感谢您的帮助。

era*_*nga 5

我在 SocketChannel 上遇到了同样的问题。我使用基于 SocketChannel 的库从 andoird 应用程序连接到 websocket(库是Autobahn websocket)。我可以成功连接到 web socket,并且可以通过 websocket 发送/接收消息。但是一段时间后(可能是 30 分钟、1 或 2 小时后),websocket 连接挂起。根据您的情况,日志似乎套接字连接仍然打开并连接到服务器,消息已经写入成功。但是服务器不会收到消息。

在我的场景中,问题不在于 SocketChannel。问题在于 TCP 超时。为了保持连接活跃,我从服务器向客户端发送周期性 ping 消息。Web 套接字默认支持此消息调用PING/PONG消息。此 ping 消息需要定期发送给客户端,以保持连接有效。当客户端收到 ping 消息时,自动回复PONG消息给服务器。通过使用这种方法,我能够长时间保持套接字连接。

有关此方法的更多信息 websocket 挂起的解决方案Websockets。互联网丢失、保持活动消息、应用程序架构等websocket 协议和 ping/pong 消息

希望这对您有所帮助(即使您没有使用 websocket)。该方法在 websocket 和您的聊天应用程序中可能相同。