Netty-socketio中判断SocketIOClient是否仍然连接
来源:互联网 发布:网络写手收入 编辑:程序博客网 时间:2024/06/05 15:21
写在前面:一般情况下是不会去考虑这些的,但是如果把SocketIOClient放入缓存中,就有可能在onDisconnect中未把SocketIOClient去除掉,尤其是多点登录的情况下。所以本文写一些自己理解的方法用来判断SocketIOClient是否仍然连接。
方法一:添加设置超时的回调函数
调用SocketIOClient中的void sendEvent(String name, AckCallback<?> ackCallback, Object ... data);
比如:
final boolean[] result = {false};socketIOClient.sendEvent(eventname, new VoidAckCallback(1000) {@Overrideprotected 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();
(一般情况下方法三就够用了)嘛,目前就这些吧~~
阅读全文
0 0
- Netty-socketio中判断SocketIOClient是否仍然连接
- socketio-netty
- socketio-netty
- netty-socketio
- netty-socketio即时通讯
- Netty-Socketio API
- Netty-Socketio Windows 性能测试
- netty-socketio实时推送信息
- netty-socketio实时推送信息
- mobile中判断pda是否连接网络
- mobile中判断pda是否连接网络
- 在游戏中判断网络是否连接
- ANDROID中判断网络连接是否可用
- android中判断网络连接是否可用
- android中判断网络是否连接
- Android中判断网络连接是否可用
- android中判断网络连接是否可用
- Android中判断是否连接到网络
- 判断两条线段是否相交(三种算法)
- MySQL中interactive_timeout和wait_timeout的区别
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
- java基础
- 如何阻止SELECT * 语句
- Netty-socketio中判断SocketIOClient是否仍然连接
- VMware虚拟磁盘编程指导(五)
- BZOJ 1026 (数位dp)
- 计算机的投资:量化投资
- 求1到100所有的质数
- 剑指offer--用两个栈实现队列
- python基础语言之assert
- 基于深度学习的大规模多标签文本分类任务总结
- opencv 14 OCR 分段字识别(segmented_word_recognition) vs2015