- WebSocketServerProtocolHandler的本质是MessageToMessageDecoder<WebSocketFrame>,也就是别的handler把数据转成WebSocketFrame之后,数据到它这儿,他才能处理,但是demo代码里没有手动添加一个将ByteBuf转成WebSocketFrame的handler,这个问题好像通义也没有收录,最终在chatgpt4o那里找到了答案.
源码里,将关键decoder添加到pipeline的入口在pipeline.add(new WebSocketServerProtocolHandler("/ws"),DefaultPipeLine.addLast方法内,会调用callHandlerAddedInEventLoop方法,下面的调用链:callHandlerAddedInEventLoop -> callHandlerAdded0 -> ctx.callHandlerAdded() -> WebSocketServerProtocolHandler.handlerAdded -> 往pipeline添加WebSocketServerProtocolHandshakeHandler -> 上面的handshakeHandler.channelRead -> WebSocketServerHandshaker.handshake ->
channelPipeline.addBefore(ctx.name(), "wsencoder", this.newWebSocketEncoder()); channelPipeline.addBefore(ctx.name(), "wsdecoder", this.newWebsocketDecoder());
- handshakeHandler.channelRead是在基于http创建websocket连接时的握手时触发
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。