MQTT---HiveMQ源代码具体解释(八)Netty-WebSocket

源博客地址:http://blog.csdn.net/pipinet123


MQTT交流群:221405150


基于netty实现Webscoket相对来说就是相当简单,所以本讲中就不搞太复杂的了,给大家看一个类图,和一段给pipeline加入handler,就能够全然了解hivemq怎样处理的了,事实上跟差点儿全部须要使用netty去支持websocket的处理一致。


websocket


public class WebsocketTransportChannelInitializer {
    public static final int MAX_CONTENT_LENGTH = 65536;
    private final WebsocketListener listener;

    public WebsocketTransportChannelInitializer(WebsocketListener listener) {
        this.listener = listener;
    }

    public void initChannel(Channel channel) {
//加入http协议编码/解码
    channel.pipeline().addBefore(Pipelines.ALL_CHANNEL_GROUP_HANDLER, Pipelines.HTTP_SERVER_CODEC, new HttpServerCodec());
//加入HttpRequest消息聚合器
        channel.pipeline().addAfter(Pipelines.HTTP_SERVER_CODEC, Pipelines.HTTP_OBJECT_AGGREGATOR, new HttpObjectAggregator(MAX_CONTENT_LENGTH));
    //加入WebSocketServerProtocolHandler
        String path = this.listener.getPath();
        String subProtocols = getSubProtocols();
        boolean allowExtensions = this.listener.getAllowExtensions();
channel.pipeline().addAfter(Pipelines.HTTP_OBJECT_AGGREGATOR, Pipelines.WEBSOCKET_SERVER_PROTOCOL_HANDLER, new WebSocketServerProtocolHandler(path, subProtocols, allowExtensions, Integer.MAX_VALUE));
//加入Websocket字节码Handler
channel.pipeline().addAfter(Pipelines.WEBSOCKET_SERVER_PROTOCOL_HANDLER, Pipelines.WEBSOCKET_BINARY_FRAME_HANDLER, new WebsocketBinaryFrameHandler());
//加入websocket帧类型handler
channel.pipeline().addAfter(Pipelines.WEBSOCKET_BINARY_FRAME_HANDLER, Pipelines.WEBSOCKET_CONTINUATION_FRAME_HANDLER, new WebsocketContinuationFrameHandler());
//加入websocket文本handler
channel.pipeline().addAfter(Pipelines.WEBSOCKET_BINARY_FRAME_HANDLER, Pipelines.WEBSOCKET_TEXT_FRAME_HANDLER, new WebsocketTextFrameHandler());
//加入mqtt message转换成websocket
channel.pipeline().addAfter(Pipelines.WEBSOCKET_TEXT_FRAME_HANDLER, Pipelines.MQTT_WEBSOCKET_ENCODER, new MqttWebsocketEncoder());
    }

    @VisibleForTesting
    String getSubProtocols() {
        return Joiner.on(",").join(this.listener.getSubprotocols());
    }
}

转载于:https://www.cnblogs.com/zhchoutai/p/8455849.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值