1、概述
MQTT是物联网主流通信协议,但是很多终端天然不具备Mqtt通信能力,比如Web H5、小程序等终端形式,这些终端提供更底层的WebSocket通信方式。因此,研究基于WebSocket进行Mqtt通信是非常普遍的需求。
2、基于WebSocket进行MQTT通信
2.1通信框架
基于WebSocket进行MQTT通信框架代码如下:
public void startup() {
mainGroup = new NioEventLoopGroup();
subGroup = new NioEventLoopGroup();
try {
ServerBootstrap server = new ServerBootstrap();
// 绑定两个线程组
server.group(mainGroup, subGroup)
// 指定NIO的模式
.channel(NioServerSocketChannel.class)
// 子处理器,用于处理workerGroup
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
ch.pipeline().addLast("logging", new LoggingHandler("DEBUG"));// 设置log监听器,并且日志级别为debug,方便观察运行流程
// websocket 基于http协议,所以要有http编解码器 服务端用HttpServerCodec
pipeline.addLast(new HttpServerCodec());
// 对写大数据流的支持
pipeline.addLast(new ChunkedWriteHandler());
/**
* 我们通常接收到的是一个http片段,如果要想完整接受一次请求的所有数据,我们需要绑定HttpObjectAggregator,然后我们
* 就可以收到一个FullHttpRequest-是一个完整的请求信息。
* 对httpMessage进行聚合,聚合成FullHttpRequest或FullHttpResponse
* 几乎在netty