Netty-socketio中判断SocketIOClient是否仍然连接
2017-10-18 15:32
1176 查看
写在前面:一般情况下是不会去考虑这些的,但是如果把SocketIOClient放入缓存中,就有可能在onDisconnect中未把SocketIOClient去除掉,尤其是多点登录的情况下。所以本文写一些自己理解的方法用来判断SocketIOClient是否仍然连接。
方法一:添加设置超时的回调函数
调用SocketIOClient中的void sendEvent(String name, AckCallback<?> ackCallback, Object ... data);
比如:
(这里我用了VoidAckCallback,会简单些。其实有些难用的)
方法二:改源码(很不推荐)
找到SocketIOClient的实现类NamespaceClient,发现其中有这么一个方法:
private boolean isConnected() {
return !disconnected.get() && baseClient.isConnected();
}
没错,如果是github上直接使用源码的话可以把这个方法改为public,然后将SocketIOClient转换成NamespaceClient后调用就能得到结果了。
方法三:取部分值(有缺陷)
仍然是SocketIOClient的实现类NamespaceClient,其实上面的方法里可以看到判断一个SocketIOClient是否仍然连接包含两部分——disconnected.get()和baseClient.isConnected(),其中,前半部分由其私有变量private
final AtomicBoolean disconnected = new AtomicBoolean();的值得到,我们无法直接取得,但是后半部分可以直接调用得到值,于是就可以使用存在缺陷的代码得到结果,这段代码的问题就在于判断是不完整的:
NamespaceClient namespaceClient= (NamespaceClient) socketIOClient;
return namespaceClient.getBaseClient().isConnected();(一般情况下方法三就够用了)
嘛,目前就这些吧~~
方法一:添加设置超时的回调函数
调用SocketIOClient中的void sendEvent(String name, AckCallback<?> ackCallback, Object ... data);
比如:
final boolean[] result = {false}; socketIOClient.sendEvent(eventname, new VoidAckCallback(1000) { @Override protected void onSuccess() { result[0] =true; } },message);
(这里我用了VoidAckCallback,会简单些。其实有些难用的)
方法二:改源码(很不推荐)
找到SocketIOClient的实现类NamespaceClient,发现其中有这么一个方法:
private boolean isConnected() {
return !disconnected.get() && baseClient.isConnected();
}
没错,如果是github上直接使用源码的话可以把这个方法改为public,然后将SocketIOClient转换成NamespaceClient后调用就能得到结果了。
方法三:取部分值(有缺陷)
仍然是SocketIOClient的实现类NamespaceClient,其实上面的方法里可以看到判断一个SocketIOClient是否仍然连接包含两部分——disconnected.get()和baseClient.isConnected(),其中,前半部分由其私有变量private
final AtomicBoolean disconnected = new AtomicBoolean();的值得到,我们无法直接取得,但是后半部分可以直接调用得到值,于是就可以使用存在缺陷的代码得到结果,这段代码的问题就在于判断是不完整的:
NamespaceClient namespaceClient= (NamespaceClient) socketIOClient;
return namespaceClient.getBaseClient().isConnected();(一般情况下方法三就够用了)
嘛,目前就这些吧~~
相关文章推荐
- HttpClient判断网络是否连接
- java中判断socket服务器端是否断开连接
- 构建实时Web的JAVA选择组合:socket.io client + socketio-netty server
- java|android 使用socket.io-client连接nodejs websocket
- socket.sendUrgentData判断网络远端是否断开连接
- C#怎么判断一个Socket是否连接
- 通过建立Socket连接来快速判断数据库连接是否正确
- 正常断开连接情况下,判断非阻塞模式socket连接是否断开
- java中判断socket网络远端是否断开连接
- JAVA 判断Socket 远程端是否断开连接
- java中判断socket网络远端是否断开连接
- java|android 使用socket.io-client连接nodejs websocket
- java中判断socket网络远端是否断开连接
- 通过建立Socket连接来快速判断数据库连接是否正确
- java中判断socket服务器端是否断开连接
- java中判断socket服务器端是否断开连接
- 如何判断socket是否已经断开和防止外部攻击,只连接不传输数据
- c#判断socket是否还连接着
- socket 精确的判断出网络是否连接
- java中判断socket服务器端是否断开连接