首页 > 代码库 > MQTT---HiveMQ源码详解(八)Netty-WebSocket
MQTT---HiveMQ源码详解(八)Netty-WebSocket
基于netty实现Webscoket相对来说就是相当简单,所以本讲中就不搞太复杂的了,给大家看一个类图,和一段给pipeline添加handler,就可以完全了解hivemq如何处理的了,其实跟几乎所有需要使用netty去支持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());
}
}
MQTT交流群:221405150
MQTT---HiveMQ源码详解(八)Netty-WebSocket
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。