2016-05-02 29 views
0

私は、TCPポート10000で最初の接続を受け取り、ネゴシエートした後、UDPソケットを別のポート(10001など)にバインドしてゲームルームを生成し、このルームに接続するクライアントを作成しました。 UDPを使用してこのポートに接続する必要があります。このNetty UDPモデルは本当にマルチスレッド化されていますか?

これは私がすべてのゲームルームを作成するために実行コードです:

... 
EventLoopGroup udpBossGroup = new NioEventLoopGroup(1); 
Bootstrap bUdp = new Bootstrap(); 
bUdp.group(udpBossGroup); 
bUdp.handler(new LoggingHandler(LogLevel.INFO)); 
bUdp.handler(new UDPInitializer()); 
bUdp.channel(NioDatagramChannel.class); 
bUdp.bind(udpPortCounter).sync(); 
... 

私はnetstatコマンドで確認してみましたが、それは同じプロセスIDを示し、多分それは父のプロセスIDです:

netstat -lanp 
udp6  0  0 :::10024    :::*        26568/java 
udp6  0  0 :::10025    :::*        26568/java 
udp6  0  0 :::10026    :::*        26568/java 

PSは同じPIDだがLWPが違うので、別のスレッドを使っていると思う。

ps -eLF | grep -i java 
UID  PID PPID LWP C NLWP SZ RSS PSR STIME TTY   TIME CMD 
root  26568 4088 26568 0 26 620767 66144 0 10:16 pts/2 00:00:00 java -jar gameserver.jar 
root  26568 4088 26569 0 26 620767 66144 0 10:16 pts/2 00:00:00 java -jar gameserver.jar 
root  26568 4088 26570 0 26 620767 66144 1 10:16 pts/2 00:00:00 java -jar gameserver.jar 
root  26568 4088 26571 0 26 620767 66144 0 10:16 pts/2 00:00:00 java -jar gameserver.jar 

質問: このモードは実際にUDPソケット上でマルチスレッド化されていますか(すべてのソケットは別のスレッドで実行されます)?

すべてのUDPソケットで別のスレッドを使用していることを確認するにはどうすればよいですか?あなたがマルチスレッドクライアント(または多言語のクライアント)を書き込む際に確認するThread.currentThread().getId()を使用して

答えて

0
  1. 印刷スレッドIDは、絶え間なくデータを送信するために、サーバー上でマルチスレッドを使用しています。
  2. 私は接続のための一つのスレッドだけの仕事を意味し、あなただけの1 NioEventLoopGroup(1)を使用した、などのデータを受信し、ステップ1に一つだけのスレッドIDの印刷ならば、これを試してみてください。

    EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioEventLoopGroup(); b.group(bossGroup, workerGroup)

  3. スレッドプール(NioDatagramChannel)を使用するNettyプロセスタスク。異なるソケットデータを処理するためにスレッドを再利用できるように、「すべてのUDPソケットで別のスレッドを使用していることを確認するにはどうすればよいですか?クライアントの多くがサーバーに接続しているときに多くのスレッドが必要になるため、データスレッドを別の方法で安全に保つ必要があるため、これを行うことをお勧めしません。

+0

私はのgetId()を印刷し、それはすべての接続に異なるIDを示しています。そして、34:スレッドをスレッド:36.私はそれが別のスレッドで実行されて、次に言うことはできますか?ありがとう – Danielzt

+0

あなたのプリントが同じゲームルームであることを確認する必要がありますか?上記のように2つのイベントグループを使用することをお勧めします –

関連する問題