【问题标题】:Android - How to keep connection with server for a long timeAndroid - 如何长时间保持与服务器的连接
【发布时间】:2012-04-09 05:25:02
【问题描述】:

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

提前感谢您的帮助。

【问题讨论】:

  • 我有同样的问题,但我没有找到解决方案。我已经搜索了 6 个月了。

标签: android chat socketchannel


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    如果您想通过服务器推送创建 Android 聊天或其他内容,请尝试使用 MQTT

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

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

    【讨论】:

    • 感谢您的回复!本教程使用 Socket,而不是 SocketChannel。所以我认为它更适合推送通知而不是聊天。他们都使用不定式循环来接收来自服务器的消息,但是使用 SocketChannel 和选择器,我们可以等到混乱出现后再进行下一个循环
    猜你喜欢
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多