MQTT---HiveMQ源码详解(八)Netty-WebSocket

来源:互联网 发布:淘宝男士防晒衣 编辑:程序博客网 时间:2024/04/24 08:17

源博客地址: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字节码Handlerchannel.pipeline().addAfter(Pipelines.WEBSOCKET_SERVER_PROTOCOL_HANDLER, Pipelines.WEBSOCKET_BINARY_FRAME_HANDLER, new WebsocketBinaryFrameHandler());//添加websocket帧类型handlerchannel.pipeline().addAfter(Pipelines.WEBSOCKET_BINARY_FRAME_HANDLER, Pipelines.WEBSOCKET_CONTINUATION_FRAME_HANDLER, new WebsocketContinuationFrameHandler());//添加websocket文本handlerchannel.pipeline().addAfter(Pipelines.WEBSOCKET_BINARY_FRAME_HANDLER, Pipelines.WEBSOCKET_TEXT_FRAME_HANDLER, new WebsocketTextFrameHandler());//添加mqtt message转换成websocketchannel.pipeline().addAfter(Pipelines.WEBSOCKET_TEXT_FRAME_HANDLER, Pipelines.MQTT_WEBSOCKET_ENCODER, new MqttWebsocketEncoder());    }    @VisibleForTesting    String getSubProtocols() {        return Joiner.on(",").join(this.listener.getSubprotocols());    }}
0 0