Netty框架服务端主动向客户端通信
来源:互联网 发布:求免费数据恢复软件 编辑:程序博客网 时间:2024/06/05 18:50
项目场景:
一个车联网项目,很多很多台车辆会定时像服务端发包,所以都是使用TCP长连接的方式。现在有一个需求是,服务端需要向客户端主动的发送升级命令,由于使用的事件驱动的Netty框架,我们怎么才能由服务端主动的向客服端通信呢?
解决方案:
package cn.ac.yangge.domain;import io.netty.channel.Channel;import java.util.HashMap;/** * Created by yangge on 2017/11/15 0015. */public class ChannelMap { public static int channelNum=0; private static HashMap<String,Channel> channelHashMap=null; public static HashMap<String, Channel> getChannelHashMap() { return channelHashMap; } public static Channel getChannelByName(String name){ if(channelHashMap==null||channelHashMap.isEmpty()){ return null; } return channelHashMap.get(name); } public static void addChannel(String name,Channel channel){ if(channelHashMap==null){ channelHashMap=new HashMap<>(100); } channelHashMap.put(name,channel); channelNum++; } public static int removeChannelByName(String name){ if(channelHashMap.containsKey(name)){ channelHashMap.remove(name); return 0; }else{ return 1; } }}
首先创建一个Map用来存储各个连接的Channel。
当有连接建立时,调用addChannel()方法:
ChannelMap.addChannel(name,ctx.channel());
当需要使用的时候使用getChannelByName()方法:
Channel channel=ChannelMap.getChannelByName(name);if(channel.isActive()){ channel.writeAndFlush(byteBuf);}else{ return 2;//不在线}
这里又有一个问题,什么时候将Channel清除出map呢?
我也懒得到处去写判断逻辑了,选择了一个比较暴力的方法:定时遍历
每隔5分钟就遍历一次所有的Channel调用channel.isActive();方法,当它为true时保留,当其为false时,remove掉Channel,并更新数据库里的设备状态。
还有每次服务启动的时候将数据库里的所有设备状态初始化一下。
阅读全文
0 0
- Netty框架服务端主动向客户端通信
- Netty实现客户端和服务端的通信
- Mina2框架--服务端与客户端通信
- java netty 服务端向客户端发送16进制数据,客户端无法接收-已解决
- 使用AIDL实现IPC通信之——实现服务端主动发送数据给客户端
- Netty初探-netty服务端和客户端demo
- Netty初探-netty服务端和客户端demo
- netty 简单服务端和客户端
- netty 服务端作为客户端跳转请求服务端
- C# client 与java netty 服务端的简单通信,客户端采用Unity。
- C# client 与java netty 服务端的简单通信,客户端采用Unity。
- app客户端、服务端通信
- Android 客户端与ssh 服务端通信 以对象的形式相互传 (一) 客户端向服务端发送对象
- android客户端利用sokcet通信和向Java服务端发请求,Java服务端把文件发给android客户端
- netty 实现 服务器 客户端通信
- 服务器主动向客户端发送信息机制
- 客户端向服务端发送信息
- Netty Http协议栈开发(客户端&服务端)
- C++重难点知识点总结
- DSS 代码分析【TaskThread与Task】
- 常用的排序算法
- 顺序栈的简单操作
- SpringBoot 实现WebSocket进行消息发送(适用于SpringMVC)
- Netty框架服务端主动向客户端通信
- 简单的弹窗应用(二)--AlertDialog
- 数据结构 — 选择排序
- 第十二周项目一Dijkstra算法的验证
- 【20171120】C语言每日一练
- 来一波面试题
- DSS 代码分析【TimeoutTask】
- MyEclipse8.5汉化方法
- 1135. Is It A Red-Black Tree (30) 红黑树