netty服务端主动回消息给客户端

业务背景:某设备通过udp协议获取数据,通过http请求控制设备,比如,通过http请求,控制设备的开关上传周期等

通过udp一问一答模式回送数据,没问题,直接通过ChannelHandlerContext.writeAndFlush即可,但是,如果通过http请求,同时,服务端主动回消息给客户端时,这种方式不可用,本人采用处理逻辑整体如下:
1, 新建全局静态变量,hashmap
2,在channelRead0()方法处将,参数put到hashmap中
3,在controller层的http请求的方法处,通过hashmap的get方法,获取到对应的参数,调用 ChannelHandlerContext.writeAndFlush方法,即可完成通过http请求,控制设备
主要代码如下:
1,

public class VoltmeterControllerPojo {
public static Map<String,ChannelHandlerContext> map = new HashMap<String, ChannelHandlerContext>();//存放变量值

public static Map<String,DatagramPacket> map1 = new HashMap<String,DatagramPacket>();//存放变量值

2,

@Override
	public void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet) throws Exception {
		VoltmeterControllerPojo.map.put("myctx", ctx);
		VoltmeterControllerPojo.map1.put("myPacket", packet);}

3,

@PostMapping(value = "/voltmeterEquipmentControl")
	public Object voltmeterController(String state, String time) throws Exception {VoltmeterControllerPojo.map.get("myctx")
				.writeAndFlush(new DatagramPacket(Unpooled.copiedBuffer(content, CharsetUtil.UTF_8),
						VoltmeterControllerPojo.map1.get("myPacket").sender()));
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值