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

标签 android chat socketchannel

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

预先感谢您的帮助。

最佳答案

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

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

有关此方法的更多信息 Solution for websocket hanging , Websockets. Loss of internet, keep-alive messages, app architecture etc , websocket protocol and ping/pong messages

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

关于Android - 如何长时间保持与服务器的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9859744/

相关文章:

安卓工作室错误 : "You must install the Android Support Repository though the SDK Manager"

即使搜索 "exact name",Android 应用程序也不会出现在 Google Play 的首页中

android - 如何动态更改选项卡指示器?

python - with.ai 中的图像上传功能,无需使用 facebook Messenger

javascript - 聊天 react 中的消息顺序

java - 当socketChannel.read(BUFFER)将返回0时

Java NIO read() 流结束

javascript - 有没有办法使用 Apache Cordova 专门了解根可用空间(Android 和 iOS)?

wpf - MVVM WPF 数据绑定(bind)到类似 Skype 的聊天?

java - HttpPost : InputDispatcher: "Channel is unrecoverably broken and will be disposed!" on Nexus 7