业务背景:某设备通过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()));
本文介绍了一种在UDP协议基础上,通过HTTP请求控制设备的方法。具体实现为:使用全局静态变量HashMap存储ChannelHandlerContext和DatagramPacket,以便在HTTP请求中通过对应key获取,从而实现设备的远程控制和消息回传。
301

被折叠的 条评论
为什么被折叠?



