Java 与 Wifi 断开连接的 Web 套接字问题

Java web socket issue with Wifi disconnect

我正在使用 org.java_websocket.WebSocket 在我的 Android 设备上创建 Websocket 服务器。我在桌面上连接了客户端。

我想在 WiFi 不可用时关闭服务器并通知客户端断开连接。当我有一个如下所示的广播接收器时,会发生什么情况,它会关闭服务器,但客户端很长一段时间都没有意识到这一点。这有什么原因吗?

public void onReceive(Context context, Intent intent) {
    ConnectivityManager conMngr = (ConnectivityManager)context.getSystemService(context.CONNECTIVITY_SERVICE);
    NetworkInfo wifi = conMngr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    NetworkInfo mobile = conMngr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    // Perform operations here to shut down web socket server
}

基本上当 Wifi 可用时,我希望能够关闭服务器并通知客户端。为什么当我为每个连接执行 conn.close() 时,我没有在桌面客户端上收到通知?

此外,我的一个客户是 Mac 使用 Starscream (https://github.com/daltoniam/Starscream) 的客户。不确定是否有任何我应该注意的事情。

如果您的 WebSocket 服务器完全符合 IETF 规范,它应该理解 WS ping/pong 控制帧。如果没有(并且您的客户端代码没有),那么您需要调查您的 TCP 超时设置。 TCP 超时可能会持续很多分钟。回想一下 TCP 设计为在连接失败时重试。