业务背景:某设备通过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()));