-1

私は2つの部分を持つプログラムを開発しました:1つはクライアントです:サーバーにメッセージを送信するだけですもう1つはサーバーです:メッセージを受信するだけで、メッセージをマップに保存します(キーはchannelID、値はList、すべてのメッセージはチャネルはリストに保存されます) 私は次のようなコードを使用します: for (int i = 0; i < 20; i++) { client.sendMessage(new Message(i)); } 初めてクライアントを実行すると、サーバーのマップには 2 つのメッセージしかなく、18 のメッセージが失われます。クライアントを再度実行すると、マップ内のすべてのメッセージが失われることはありません。このようなメッセージを送信すると for (int i = 0; i < 20; i++) { Thread.sleep(50); client.sendMessage(new Message(i)); } 、メッセージが失われることはありません。誰が電話して、何が問題なのか教えてください。ありがとう

4

1 に答える 1

1

メッセージの書き込みは netty では非同期であるため、メッセージが実際にリモートピアに送信される前にループが終了する場合があります。Channel.write(..).await..(); のように呼び出して、すべての書き込みが完了するのを待ってください。

于 2012-07-02T19:23:05.163 に答える