2012-03-09 11 views
1

ソケットを介してサーバーに接続するクライアントがあります。接続後、サーバー上で発生したすべてのイベントは、登録されたすべてのクライアントに送信されます。Javaソケットイベント駆動

すべてのクライアントは、イベントに関連するデータを受信する必要があります。

クライアントを実装するだけです...サーバーに接続してイベントのデータを受け取る必要があることを意味します。

私のような何かを行う上で考えていた:

this.socket = new Socket(InetAddress.getByName(host), 
this.socket.connect(socket.getLocalSocketAddress(), SOCKET_TIMEOUT); 

そして、whileループでソケットのInputStreamを取得するスレッドを起動します。

しかし、これは、イベント駆動型のクライアントをソケット経由で実装する最良の方法であるかどうかわかりません。

ですか?

答えて

0

これは、ストリームからread()への呼び出しをブロックし続けるクライアント用の別個のスレッドを生成することによってしばしば行われます。つまり、データが利用可能になるとすぐにread()呼び出しはブロックを解除し、 ( 'イベントの発生')、次のイベントを待機するブロックに戻ります。

2

イベントドリブン環境では、Datagram Socketはネットワークのオーバーヘッドは低くなりますが、信頼性は保証されません。ここには、データグラムソケットクライアントとサーバーの作成に関するtutorialがあります。

0

クライアントがGUIイベントのような他の入力に応答しなければならない限り、スレッドは必ずしも必要ではありません。

次に、TCPについて話しているとすれば、ループ内のソケットから読み込み、受信したデータを完全なアプリケーション "イベント"がなくなるまでバッファリングし、アプリケーション "イベントハンドラ"を呼び出します。それは簡単です。

+0

スレッドを作成しないと、アプリケーションがブロックされますか?私は常にブロッキング操作であるソケットを読んでいる必要がありますか、間違っていますか?応答のThx –

+2

はい、それはソケットの読み取りをブロックします。あなたが望むものではありませんか? Javaの非ブロックIOフレームフォークもあります。http://en.wikipedia.org/wiki/New_I/Oをチェックしてください –

関連する問題