nanfeng16 2021-03-17 15:14 采纳率: 0%
浏览 76

MQTT模拟客户端的WebSocket协议支持消息转码错误

由于在做mqtt设备模拟,在做websocket协议支持时遇到了问题,ws握手能够成功,但后续的消息编解码发送数据那边解析失败了,说明我这边的数据编码不正确。基于Netty做的客户端实现,尝试更改过几个handler都没效果。网上能找到的mqtt的ws协议支持做的大部分是js版本的,但不符合项目要求。想问下有大神指导问题所在吗?

下图是获取websocket协议的bootstrap代码段,也是增加的主要handler

public static Bootstrap getWebSocketServer(NettyMqttParams nettyMqttParams){
        if(!wsBootstrap.containsKey(nettyMqttParams.getHost())) {
            synchronized(NettyUtil.class) {
                EventLoopGroup group = new NioEventLoopGroup();
                try {
                    Bootstrap bootstrap  = new Bootstrap();
                    bootstrap.option(ChannelOption.SO_KEEPALIVE,true)
                            .group(group)
                            .channel(NioSocketChannel.class)
                            .handler(new com.example.mqttclientsimulator.mqtt.handler.ChannelInitializer())
                            .handler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ChannelPipeline pipeline = ch.pipeline();
                            pipeline.addLast("httpRequestDecoder", new HttpRequestDecoder());
                            pipeline.addLast("httpResponseEncoder", new HttpResponseEncoder());
                            pipeline.addLast("httpResponseDecoder", new HttpResponseDecoder());

                            pipeline.addLast("decoder", new MqttDecoder());
                            pipeline.addLast("encoder", MqttEncoder.INSTANCE);
                            pipeline.addLast("httpObjectAggregator", new HttpObjectAggregator(65536));
                            pipeline.addLast("http-chunked", new ChunkedWriteHandler());
                        }
                    });
                    bootstrap.remoteAddress(nettyMqttParams.getHost(), nettyMqttParams.getPort());
                    return bootstrap;
                }catch (Exception e){
                    LOG.error(e.getMessage(),e);
                }
                return null;
            }
        }else{
            return wsBootstrap.get(nettyMqttParams.getHost());
        }

    }
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-07 18:04
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作