1. WebSocketServerProtocolHandler的本质是MessageToMessageDecoder<WebSocketFrame>,也就是别的handler把数据转成WebSocketFrame之后,数据到它这儿,他才能处理,但是demo代码里没有手动添加一个将ByteBuf转成WebSocketFrame的handler,这个问题好像通义也没有收录,最终在chatgpt4o那里找到了答案.
  2. 源码里,将关键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());
  3. handshakeHandler.channelRead是在基于http创建websocket连接时的握手时触发

站在巨人的肩上
2 声望0 粉丝