我用SocketChannel为Android写了一个聊天应用。它成功地与服务器连接,所有功能都正常工作。但是在我登录很长一段时间后(大约2-3个小时),我再次尝试发送聊天消息,但失败了。在日志文件中,SocketChannel选择器仍处于打开状态并连接到服务器,消息已写入成功。有什么问题吗?我遗漏了什么?
提前感谢您的帮助。
发布于 2012-03-25 21:57:28
如果你想通过服务器推送为android或其他东西创建聊天,可以尝试使用MQTT
http://tokudu.com/2010/how-to-implement-push-notifications-for-android/
这是一件非常酷的事情,看看吧:-)
发布于 2014-02-14 15:24:46
我在SocketChannel上也遇到了同样的问题。我使用了基于SocketChannel的库从andoird应用程序连接到websocket (库是Autobahn websocket)。我可以成功地连接到web socket,并且可以通过websocket发送/接收消息。但过了一段时间(可能是30分钟、1小时或2小时后),websocket连接挂起。根据您的方案,日志似乎套接字连接仍然打开并连接到服务器,消息已写入成功。但是服务器不会接收消息。
在我的场景中,问题不在于SocketChannel。问题出在TCP超时。为了使连接保持活动状态,我从服务器向客户端发送周期性的ping消息。 socket默认支持此消息调用PING/PONG Web消息。此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和您的聊天应用程序中可以采用相同的方法。
https://stackoverflow.com/questions/9859744
复制相似问题