3

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

在此先感谢您的帮助。

4

2 回答 2

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 以及您的聊天应用程序中可能相同。

于 2014-02-14T07:24:45.730 回答
0

如果您想通过服务器推送为 android 或其他东西创建聊天,请尝试使用 MQTT

http://tokudu.com/2010/how-to-implement-push-notifications-for-android/

这是一个非常酷的东西,看看它:-)

于 2012-03-25T13:57:27.873 回答