nafos:使用netty同端口监听tcpSocket和websocket

首先我们得先弄清楚websocket和tcpSocket的区别。websocket也是基于tcp的应用层协议,只是在传统的socket上进行了封装。

然后我们要知道netty的handle支持动态增删。

综上所述,相信脑海里已经有对应的方案了。那就是动态设置编解码处理器。

 

关键代码如下:

       // 1.socket方式服务 // 设置N秒没有读到数据,则触发一个READER_IDLE事件。 pipeline.addLast(new IdleStateHandler(readerIdleTime,0,0, TimeUnit.SECONDS)); pipeline.addLast("active",new ChannelActiveHandle()); pipeline.addLast("socketChoose",new SocketChooseHandle()); //tcpsocket编码解码handle,如果是websocket链接,会将其删除 pipeline.addLast("lengthEncode",new LengthFieldPrepender(4, false)); pipeline.addLast("lengthDecoder",new LengthFieldBasedFrameDecoder(2000, 0, 4,0, 4)); pipeline.addLast(bytebufToByteHandle); //因为接收类型的泛型不对,所以在websocket握手的时候不会进入该handle //此handle为最后的socket消息分解,web和tcp通用 pipeline.addLast("byteToBuf",byteToByteBufHandle); pipeline.addLast("protocolResolve",protocolResolveHandle);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyjgy.html