【问题标题】:Netty 4.0: Detect, if Websocket handshake is doneNetty 4.0:检测,如果 Websocket 握手完成
【发布时间】:2013-09-08 17:39:42
【问题描述】:

我想将旧的 Netty 3.x websocket 服务器重构为新版本 4.0。 Websocket 握手完成后,我需要向客户端发送“欢迎消息”。也许有人可以给我提示,一旦 websocket 连接准备好使用,我怎么能得到通知?我在玩websocket server example

【问题讨论】:

    标签: java websocket netty


    【解决方案1】:

    WebSocketServerHandshaker.handshake() 返回一个ChannelFuture,当握手完成时收到通知。

    【讨论】:

      【解决方案2】:

      如果 Websocket 握手完成,Netty 将引发用户事件。

      https://github.com/netty/netty/blob/netty-4.1.51.Final/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandshakeHandler.java#L101

      Netty 4.0 中的 UserEvent 是WebSocketServerProtocolHandler.ServerHandshakeStateEvent.HANDSHAKE_COMPLETE,Netty 4.1 中是WebSocketServerProtocolHandler.HandshakeComplete

      您可以在 WebSocketHandler 中覆盖 userEventTriggered 方法:

      public class WebSocketFrameHandler extends SimpleChannelInboundHandler<WebSocketFrame> {
      
          @Override
          protected void channelRead0(ChannelHandlerContext ctx, WebSocketFrame frame) {
              if (frame instanceof TextWebSocketFrame) {
                  // Send the uppercase string back.
                  String request = ((TextWebSocketFrame) frame).text();
                  ctx.channel().writeAndFlush(new TextWebSocketFrame(request.toUpperCase()));
              } else {
                  String message = "unsupported frame type: " + frame.getClass().getName();
                  throw new UnsupportedOperationException(message);
              }
          }
      
          @Override
          public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
              if (evt instanceof WebSocketServerProtocolHandler.HandshakeComplete) {
                  WebSocketServerProtocolHandler.HandshakeComplete complete = (WebSocketServerProtocolHandler.HandshakeComplete) evt;
                  System.out.println("New WebSocket handshake complete, uri:" + complete.requestUri());
              } else {
                  super.userEventTriggered(ctx, evt);
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-04-10
        • 2013-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-02
        • 1970-01-01
        相关资源
        最近更新 更多