簡単なオンライン ゲーム用のソケット接続を作成するプログラムを Java で作成しました。サーバーはマルチクライアントであり、ログに記録されたユーザーのリストがあります。クライアントを閉じると、ユーザーをログアウトするメッセージがサーバーに送信されます。また、クライアントが Eclipse の「終了」ボタン (または Windows タスク マネージャー) で終了したときに、クライアントが同じメッセージを送信することも必要です。ShootdownHook を試してみましたが、うまくいきません。何か案が?ありがとう。
2 に答える
1
堅牢なシステムを実現するには、ある時点で、サーバーが接続を閉じることができるハートビートメカニズムを実装する必要があります。たとえば、クライアントが過去30秒間にハートビートを設定していない場合は、接続を閉じます。クライアントとサーバー間のネットワークがダウンした場合、またはクライアントが実行されているマシンが醜い死を遂げた場合を考えてみてください。このような場合、サーバーに到達するクライアントのログアウトメッセージに依存することはできません。
そうは言っても、シャットダウンフックは実際のネットワークIOを実行するには遅すぎるのではないかと思います。シャットダウンフックを使用して接続を閉じることに成功しました。したがって、他のシャットダウンアクティビティ(特に接続のクローズ)が開始される前にメッセージが送信される、より正式なシャットダウンが必要になります。
于 2011-05-15T01:58:16.940 に答える
0
Eclipse で赤い四角が表示された場合、クライアント側でできることは何もできません。「極度の偏見で」jvmを終了します-コードは実行されません。フックも何もありません。
@Dilumが説明したように、サーバー側で対処する必要があります。
于 2011-05-15T02:10:29.600 に答える