我正在使用org.java_websocket.WebSocket
在我的安卓设备上创建一个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()
操作时,就无法在桌面客户机上得到通知?
另外,我的客户端之一是使用Starscream
(https://github.com/daltoniam/Starscream)的Mac客户机。我不确定是否有什么事情我应该知道。
发布于 2016-03-30 06:54:00
如果您的WebSocket服务器完全符合IETF规范,它应该理解WS ping/pong控件框架。如果没有(客户端代码也没有),那么您需要研究TCP超时设置。TCP超时时间可以是很多分钟。回想一下TCP是设计用来在连接失败时重试的。
https://stackoverflow.com/questions/36255072
复制