???????????????????????????
??? ???????????????????????
??????????????????????????????????????????????? ???????????????????????????????????源博客地址:http://blog.csdn.net/pipinet123
MQTT交流群:221405150
?基于netty实现Webscoket相对来说就是相当简单,所以本讲中就不搞太复杂的了,给大家看一个类图,和一段给pipeline加入handler,就能够全然了解hivemq怎样处理的了,事实上跟差点儿全部须要使用netty去支持websocket的处理一致。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGlwaW5ldDEyMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="websocket" title="">
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()); ???}}
???????????????MQTT---HiveMQ源代码具体解释(八)Netty-WebSocket
原文地址:https://www.cnblogs.com/zhchoutai/p/8455849.html