2012-01-22 10 views
1
  1. Nettyには何とかこの機能が組み込まれていますか?
  2. これがない場合は、どこでこれを行うべきですか、これをどのように実装する必要がありますか?

答えて

5

私は組み込みサポートがあるとは思わない。ただし、Handlerでswitch文として実装することは難しくありません。

このウェブソケットをご覧ください。 messageReceived()

@Override 
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { 
    Object msg = e.getMessage(); 
    if (msg instanceof HttpRequest) { 
     handleHttpRequest(ctx, (HttpRequest) msg); 
    } else if (msg instanceof WebSocketFrame) { 
     handleWebSocketFrame(ctx, (WebSocketFrame) msg); 
    } 
} 

private void handleHttpRequest(ChannelHandlerContext ctx, HttpRequest req) throws Exception { 
    // Allow only GET methods. 
    if (req.getMethod() != GET) { 
     sendHttpResponse(ctx, req, new DefaultHttpResponse(HTTP_1_1, FORBIDDEN)); 
     return; 
    } 

    // Send the demo page and favicon.ico 
    if (req.getUri().equals("/")) { 
     HttpResponse res = new DefaultHttpResponse(HTTP_1_1, OK); 

     ChannelBuffer content = WebSocketServerIndexPage.getContent(getWebSocketLocation(req)); 

     res.setHeader(CONTENT_TYPE, "text/html; charset=UTF-8"); 
     setContentLength(res, content.readableBytes()); 

     res.setContent(content); 
     sendHttpResponse(ctx, req, res); 
     return; 
    } else if (req.getUri().equals("/favicon.ico")) { 
     HttpResponse res = new DefaultHttpResponse(HTTP_1_1, NOT_FOUND); 
     sendHttpResponse(ctx, req, res); 
     return; 
    } 

    // Handshake 
    WebSocketServerHandshakerFactory wsFactory = new WebSocketServerHandshakerFactory(
      this.getWebSocketLocation(req), null, false); 
    this.handshaker = wsFactory.newHandshaker(req); 
    if (this.handshaker == null) { 
     wsFactory.sendUnsupportedWebSocketVersionResponse(ctx.getChannel()); 
    } else { 
     this.handshaker.handshake(ctx.getChannel(), req); 
    } 
} 

受信したメッセージのタイプに基づいて、我々経路。

次に、handleHttpRequest()では、URIに基づいてルーティングします。

これが役に立ちます。

関連する問題