Netty 4.0:检测,如果 Websocket 握手完成

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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);
        
    

【讨论】:

以上是关于Netty 4.0:检测,如果 Websocket 握手完成的主要内容,如果未能解决你的问题,请参考以下文章

gateway网关中netty的websocket设置数据内容大小

netty系列之:使用netty搭建websocket客户端

netty系列之:使用netty搭建websocket客户端

十.Netty入门到超神系列-基于WebSocket开发聊天室

Nginx:反向代理 WebSocket Draft 76

2020-06-18 面试:netty最多可以支持多少个websocket 长连接