Stories

Detail Return Return

WebSocketServerProtocolHandler是如何實現將網絡數據解碼成WebSocketFrame的 - Stories Detail

  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連接時的握手時觸發

Add a new Comments

Some HTML is okay.