源博客地址:http://blog.csdn.net/pipinet123
MQTT交流群:221405150
基于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) {
channel.pipeline().addBefore(Pipelines.ALL_CHANNEL_GROUP_HANDLER, Pipelines.HTTP_SERVER_CODEC,
new HttpServerCodec());
channel.pipeline().addAfter(Pipelines.HTTP_SERVER_CODEC, Pipelines.HTTP_OBJECT_AGGREGATOR,
new HttpObjectAggregator(MAX_CONTENT_LENGTH));
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));
channel.pipeline().addAfter(Pipelines.WEBSOCKET_SERVER_PROTOCOL_HANDLER, Pipelines.WEBSOCKET_BINARY_FRAME_HANDLER,
new WebsocketBinaryFrameHandler());
channel.pipeline().addAfter(Pipelines.WEBSOCKET_BINARY_FRAME_HANDLER, Pipelines.WEBSOCKET_CONTINUATION_FRAME_HANDLER,
new WebsocketContinuationFrameHandler());
channel.pipeline().addAfter(Pipelines.WEBSOCKET_BINARY_FRAME_HANDLER, Pipelines.WEBSOCKET_TEXT_FRAME_HANDLER,
new WebsocketTextFrameHandler());
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://ju.6miu.com/read-19534.html