2016-07-01 5 views
2

をストリーミングするためネッティー4.x.xのWebSocketハンドシェイク私は公式ネッティーからエコーサーバの例を持って Echo Serverサーバー

のWebSocketからそれに接続し、ストリーミングする機能を追加する方法?ここ

は私ServerHandlerコードです:

public class ServerHandler extends ChannelInboundHandlerAdapter 
{ 
    @Override 
    public void channelRegistered(ChannelHandlerContext ctx) throws Exception { 
     super.channelRegistered(ctx); 
     // !!!!! Think here should be WebSocket Handshake? 
    } 

    @Override 
    public void channelRead(ChannelHandlerContext ctx, Object msg) 
    { 
     System.out.println(msg); 
     ctx.write(msg); 
    } 

    @Override 
    public void channelReadComplete(ChannelHandlerContext ctx) 
    { 
     ctx.flush(); 
    } 

    @Override 
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) 
    { 
      // Close the connection when an exception is raised. 
     cause.printStackTrace(); 
    } 
} 

今クローム接続は言う: '://127.0.0.1:WS 8080 /' へのWebSocket接続が失敗しました:エラーのWebSocketハンドシェイク中:無効なステータス行

答えて

0

だから、私は解決策を見つけました! Webソケットのネイティブドキュメントには準拠していませんが、期待どおりに動作するかどうかは誰にでも分かります!

public void channelRead(ChannelHandlerContext ctx, Object msg) 
    { 
     DefaultHttpRequest httpRequest = null; 
     if (msg instanceof DefaultHttpRequest) 
     { 
      httpRequest = (DefaultHttpRequest) msg; 

      // Handshake 
      WebSocketServerHandshakerFactory wsFactory = new WebSocketServerHandshakerFactory("ws://127.0.0.1:8080/", null, false); 
      final Channel channel = ctx.channel(); 
      final WebSocketServerHandshaker handshaker = wsFactory.newHandshaker(httpRequest); 

      if (handshaker == null) { 

      } else { 
       ChannelFuture handshake = handshaker.handshake(channel, httpRequest); 
      } 
     } 
    } 

は、あなたのパイプラインに

p.addLast(new HttpRequestDecoder(4096, 8192, 8192, false)); 
p.addLast(new HttpResponseEncoder()); 

を追加することを忘れないでください。

1

Nettyサーバーはすべてのプロトコルを自動的に処理しないため、WebSocketのサポートを追加する必要があります。

Nettyのxrefページで関連する例を調べることをお勧めします。 io.netty.exampleパッケージになるまで、パッケージリストを下にスクロールします。そのリストにはio.netty.example.http.websocketx.serverというパッケージがあります。 websocketサーバーを実装する方法や、単にハンドラを実装する方法については、かなりシンプルでよくレイアウトされた例があります。

WebSocketサーバーはHTTPサーバーとしての生活を始める必要があるという点で若干複雑ですが、HTTPS接続の「アップグレード」によってWebSocketを開始する必要があるためです。これはかなり明確です。

関連する問題