当前位置: 首页 > 知识库问答 >
问题:

Netty 4中如何处理PING/PONG帧?

程旭尧
2023-03-14
class ClientWebSocketHandler extends SimpleChannelInboundHandler<WebSocketFrame> {

  @Override
    protected void channelRead0(ChannelHandlerContext ctx, WebSocketFrame frame) throws Exception {

    }
}

我只能收到TextWebSocketFrame

如何处理PingWebSocketFrame和PongWebSocketFrame,我想知道客户端何时发送Ping/Pong


共有2个答案

梁浩涆
2023-03-14

在任何WebSocketFrame到达您的SimpleChannelInboundHandler之前,Netty已收到PingWebSocketFrame和PongWebSocketFrame。有关其处理逻辑,请参见抽象WebSocketProtocolHandler。

步兴为
2023-03-14

这样:(知道channelRead0已弃用,应该在5.0版本后删除或不支持,请在评论中询问您是否想要最新的答案)

/**
 * * <strong>Please keep in mind that this method will be renamed to
 * {@code messageReceived(ChannelHandlerContext, I)} in 5.0.</strong>
 */
@Override
public void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
    Channel ch = ctx.channel();
    if (!handshaker.isHandshakeComplete()) {
        handshaker.finishHandshake(ch, (FullHttpResponse) msg);
        l.error("WebSocket Client connected!");
        handshakeFuture.setSuccess();
        return;
    }

    if (msg instanceof FullHttpResponse) {
        FullHttpResponse response = (FullHttpResponse) msg;
        throw new IllegalStateException("Unexpected FullHttpResponse (getStatus=" + response.status() + ", content="
            + response.content().toString(CharsetUtil.UTF_8) + ')');
    }


    WebSocketFrame frame = (WebSocketFrame) msg;
    if (frame instanceof TextWebSocketFrame) {
        TextWebSocketFrame textFrame = (TextWebSocketFrame) frame;
        l.info("WebSocket Client received message:{} ", textFrame.text());

        //needed if the server close the socket if no ping send for long
        //better to send the ping with a timer
        // it allwos to choose the rate
        ch.write(new PingWebSocketFrame());

    } else if (frame instanceof PongWebSocketFrame) {
        l.info("WebSocket Client received pong");
    } else if (frame instanceof CloseWebSocketFrame) {
        l.info("WebSocket Client received closing");
        ch.close();
    }
}
 类似资料:
  • 这是一个样本日志。最后一行是问题所在。我按了“D”就放了。注意,“D”显示为释放,而不是按下。对我来说没有意义... 按下的键:d 释放的密钥:d

  • Pong! 是一个完全用 JavaScript 实现的 pong 游戏,基于 Socket.io 和 Canvas 技术实现。 特性: 服务器 socket.io 集成 支持两个在线玩家 响应式和自适应 UI 支持移动设备 支持手势操作 tokenized lobby entry page

  • dubbo 2.5.6版本新增了对netty4通信模块的支持,启用方式如下 provider端: <dubbo:protocol server="netty4" /> 或 <dubbo:provider server="netty4" /> consumer端: <dubbo:consumer client="netty4" /> 注意 provider端如需不同的协议使用不同的通信层框架,

  • 本文向大家介绍如何处理硒中的帧?,包括了如何处理硒中的帧?的使用技巧和注意事项,需要的朋友参考一下 我们可以借助以下方法来处理Selenium中的帧- switchTo()。frame(frameNumber) 此方法使用帧ID作为参数。框架ID的索引从0开始。如果未找到框架,则会引发NoSuchFrameException。 switchTo()。frame(frameName) 此方法使用开发

  • ms (数值型) 自ping到pong经历的毫秒数 socket.on('pong', (timeout) => { // ... });