2016-07-26 35 views
1
class ClientWebSocketHandler extends SimpleChannelInboundHandler<WebSocketFrame> { 

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

    } 
} 

我只能接受TextWebSocketFrame & BinaryWebSocketFramechannelRead0如何在Netty 4中處理PING/PONG框架?

如何處理PingWebSocketFramePongWebSocketFrame,我想知道當客戶端發送平/傍

回答

0

的Netty已收到PingWebSocketFrame和PongWebSocketFrame任何WebSocketFrame到來之前在您的SimpleChannelInboundHandler.See抽象WebSocketProtocolHandler其處理邏輯。

1

那樣:

/** 
* * <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(); 
    } 
}