私は、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()
を使用して
私はのgetId()を印刷し、それはすべての接続に異なるIDを示しています。そして、34:スレッドをスレッド:36.私はそれが別のスレッドで実行されて、次に言うことはできますか?ありがとう – Danielzt
あなたのプリントが同じゲームルームであることを確認する必要がありますか?上記のように2つのイベントグループを使用することをお勧めします –