2011-07-21 18 views
0

私は、アプリケーションの実行中にシリアル化されたオブジェクトを継続的に受け入れる必要があるJavaプログラムを作成しています。オブジェクトは、ユーザーが要求したときにサーバーによって送信されます。TCPクライアントがオブジェクトを受け入れる

私のメインアプリケーションは、実行メソッドでtcpクライアント(スレッドを拡張)を初期化しますが、関数からその行からオブジェクトを読み込もうとしています。

擬似コードは、次のとおりです。

*tcp client extends thread 

*global vars: ip, port, socket, oi stream, oo stream, object reference 

*run() 
     make connection 

*getObject() 
     object reference = (object).readobject() 
     return object 

私の主なアプリケーションは、更新ループでclient.getObject()を呼び出します。待っているオブジェクトがあるかもしれません。

私はこれについて間違った方法をしていますか?

+0

クライアント数についてご説明ください。接続ライフサイクル。接続セマンティクス(例えば、セッションベースかどうか)。平均ペイロードサイズ。最後に、重要なのはレイテンシまたはスループットのいずれかを最大限にすることです。 – alphazero

答えて

1

"クラシック"のサーバー動作またはノンブロッキングIOを実行しようとしていますか?

前者の場合は、着信要求を受け入れるためのブロッキングキューとスレッドを処理するためのスレッドプールをお勧めします。スレッドプールが使い果たされるまで、サーバが要求を処理するスレッドを割り当てます。スレッドが解放されてプールに返されるまで要求をキューに入れます。

ノンブロッキングIOはまったく別の問題です。どのようにNettynode.jsが設計され、実装されているかを見てください。

クラスを拡張することはありませんThread - 新しい動作を追加することはまずありません。代わりにRunnableを実装し、Threadインスタンスに渡して実行してください。

+0

私はそのrunnableを読んでいるより良い方法は、アドバイスをいただきありがとうございます。 – emily

+1

@duffymo:使用シナリオ、クライアント数、接続耐久性などについては、ほとんど入力がなくても、どうすればそれを禁止することができますか?そして、JavaネットワークでNIOを投げ込むと、その洞察をはるかに混乱させるでしょう。 [2c /優しい音] – alphazero

0

run()メソッドはすべてのオブジェクトを読み込んでキューに追加することをお勧めします。 getOject()はキューから次のオブジェクトを取得します。 int queueLength()を使用して、どのように待っているかを確認することもできます。

+1

ありがとう! – emily

関連する問題