2017-01-06 3 views
1

私はNettyを学ぶ途中です。春のブートを使っていくつかのチュートリアルを始めました。私の目標は、メッセージを受け取るためのTCPポートを設定し、残りのAPIにそれらを提示するアプリケーションをcreataにすることです。チュートリアルのNetty closeFuture()。sync()。channel();残りの部分をブロックする

ほとんどは、私はネッティーを開始するには、この

serverChannel = serverBootstrap.bind(tcpPort).sync().channel().closeFuture().sync().channel(); 

のようなものを追加する必要があることを言っています。 これを行うと、私が実装した残りのサービスは機能していません。今 私はアプリケーションを起動するには、次のコードスニペットを使用します。

serverChannel = serverBootstrap.bind(tcpPort).sync().channel(); 

すべてがうまく動作しているようです。 誰かがこの問題を何か説明してくれるのでしょうか?

おかげ

答えて

0

最初の部分は、TCPポート上でそれを結合サーバー、 1)、 2)ソケットが待機している(準備ができて、サーバーを待つ) 3)を起動し、関連するチャネルを返します。

serverBootstrap.bind(tcpPort).sync().channel(); 
       (1)   (2)  (3) 

2番目の部分はcloseFutureはあなたに(サーバソケットのシャットダウンを意味する)、「クローズ」操作の「未来」を与える、とsyncシャットダウンにメインチャネル(ソケットをリスニング)(closeFuture().sync())を待つことですこの未来が待っている。 channel()は、現在閉じていることを除いて、最初のチャンネルと全く同じチャンネルを返します。

このコードはさまざまな例で見つけることができますが、一般にメインスレッドなどでサーバー(バインド)を起動し、何かを待たなければメインスレッドが終了し、JVMしたがって、起動後すぐにサーバーを停止する必要があります。

だから、一般的には、私たちがやっていることは次のとおりです。

    は終了し、その後
  • サーバー
  • は、ビジネスロジック(そしてもちろんのネットワークプロトコル)を処理するためにパイプラインで必要なハンドラを追加開始
  • closeFutureを待つことによってあなたのメインは、あなたのビジネスロジックを一旦シャットダウンするようになると、メインチャンネルを閉じてメインスレッドも閉じるようになります。

参考例Shutdown netty programmatically

関連する問題