我使用SocketChannel为Android编写了一个聊天应用程序。它与服务器成功连接,所有功能都有效。但是在我登录很长一段时间后(大约2-3个小时),我尝试再次发送聊天消息,但它失败了。在日志文件SocketChannel中,选择器仍然打开并连接到服务器,消息已经写入成功。有什么问题?我错过了什么?
提前感谢您的帮助。
答案 0 :(得分:3)
我和SocketChannel有同样的问题。我已经使用基于SocketChannel的库连接到来自andoird应用程序的websocket(库是Autobahn websocket)。我可以成功连接到Web套接字,并可以通过websocket发送/接收消息。但过了一段时间(可能是30分钟,1或2小时后),websocket连接挂起。作为您的方案,日志似乎套接字连接仍然打开并连接到服务器,消息已写入成功。但是服务器不会收到消息。
在我的场景中,问题不在于SocketChannel。问题是TCP超时。为了使连接保持活动,我正在从服务器向客户端发送peroidic ping消息。 Web套接字默认支持此消息调用 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和聊天应用程序中的方法可能相同。
答案 1 :(得分:0)
如果你想通过推送从服务器创建一个Chat for android或其他东西,请尝试使用MQTT
http://tokudu.com/2010/how-to-implement-push-notifications-for-android/
这是一件非常酷的事情,请看一下: - )