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

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

    } 
} 

kann ich nur erhalten TextWebSocketFrame & BinaryWebSocketFrame in channelRead0Wie behandelt man PING/PONG-Rahmen in Netty 4?

Wie PingWebSocketFrame und PongWebSocketFrame zu handhaben, was ich wissen will, wenn der Client sendet Ping/Pong

Antwort

0

Netty PingWebSocketFrame und PongWebSocketFrame erhalten hat, bevor eine WebSocketFrame ankommt an Ihrem SimpleChannelInboundHandler.See Zusammenfassung WebSocketProtocolHandler für seine Verarbeitungslogik.

1

wie folgt aus:

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