Netty框架服务端主动向客户端通信
2017-11-20 19:44
459 查看
项目场景:
一个车联网项目,很多很多台车辆会定时像服务端发包,所以都是使用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,并更新数据库里的设备状态。
还有每次服务启动的时候将数据库里的所有设备状态初始化一下。
相关文章推荐
- 通过XMLRPC简单构建 python服务端和C#客户端通信框架
- 【转】TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
- 使用Mina框架开发 QQ Android 客户端(2) 客户端与服务端的通信
- 写一个Tomcat+Okhttp实现的聊天websocket聊天框架(一)-- 完成客户端和服务端的通信
- TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
- TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
- C# client 与java netty 服务端的简单通信,客户端采用Unity。
- 一步步实现自己的框架系列(三):客户端服务端通信的实现
- Netty入门之客户端与服务端通信(二)
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答 推荐
- Netty实现客户端和服务端的通信
- 使用AIDL实现IPC通信之——实现服务端主动发送数据给客户端
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答
- C# client 与java netty 服务端的简单通信,客户端采用Unity。
- Mina2框架--服务端与客户端通信
- Netty4 学习笔记之一:客户端与服务端通信 demo
- (转)TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
- NIO学习之Selector,SelectionKey与客户端与服务端通信简单实现(1)
- 自定义基于netty的rpc框架(2)---服务端的实现
- socket编程 -- epoll模型服务端/客户端通信的实现