MQTT---HiveMQ源码详解(八)Netty-WebSocket
来源:互联网 发布:淘宝男士防晒衣 编辑:程序博客网 时间:2024/04/24 08:17
源博客地址: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) {//添加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
- MQTT---HiveMQ源码详解(八)Netty-WebSocket
- MQTT---HiveMQ源码详解(九)Netty-Codec
- MQTT---HiveMQ源码详解(十)Netty-Statistics
- MQTT---HiveMQ源码详解(十一)Netty-Throttling
- MQTT---HiveMQ源码详解(五)Netty-启动与Listeners加载
- MQTT---HiveMQ源码详解(六)Netty-Handlers总览
- MQTT---HiveMQ源码详解(七)Netty-SSL/NoSSL
- MQTT---HiveMQ源码详解(十三)Netty-MQTT消息、事件处理(源码举例解读)
- MQTT---HiveMQ源码详解(十二)Netty-MQTT消息、事件处理(流程)
- MQTT---HiveMQ源码详解(一)概览
- MQTT---HiveMQ源码详解(三)配置加载
- MQTT---HiveMQ源码详解(四)插件加载
- MQTT---HiveMQ源码详解(十四)Persistence-LocalPersistence
- MQTT---HiveMQ源码详解(十六)TopicTree
- MQTT---HiveMQ源码详解(二)结构与启动
- MQTT---HiveMQ源码详解(外传)为什么使用Xodus
- MQTT---HiveMQ源码详解(十五)Persistence-Cluster/Single
- MQTT---HiveMQ源码详解(十八)Cluster-kryo与Serializer
- iOS微信分享不触发回调函数onResp()解决方法
- 导入java项目出现下面的错误The project cannot be built until build path errors are resolve
- 关于ssh
- Mysql命令模式导入XXX.sql文件
- SQL习题笔记
- MQTT---HiveMQ源码详解(八)Netty-WebSocket
- Linux时间函数
- maven学习笔记
- 错误1error C2143: 语法错误 : 缺少“}”(在“(”的前面) cocos2d\cocos\ui\uiscale9sprite.h
- 6.Javascript语法-循环语句while循环
- 单链表插入和删除结点c语言的实现
- URL
- openvpn两种认证方式的区别
- Java中字String的常见用法