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 设计为在连接失败时重试。
我正在使用 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 设计为在连接失败时重试。