私はマルチスレッドサーバを作成しています。クライアント要求を処理し、完了したらクライアントに戻す必要があります。同時実行性:コードの共通ブロックが完了するまで待ちます。
私は、ペイロードを共通キューに渡す同時クライアント接続オブジェクトのリストを持っています。キューを通過した後、ペイロードはサーバーによって処理され、応答が生成されます。
問題は、サーバーに処理が完了したことをクライアントに通知する方法がわかりません。
これは、ペイロードが以前にクライアントスレッドによってロードされたBlockingQueueの、され、クライアントのペイロードを扱うスレッドです:同時に
Thread messageHandling = new Thread() {
public void run(){
while(true){
try{
Object payLoad= payLoads.take();
// Do some handling
// SEND REPLY BACCK TO THE CLIENT
}
catch(InterruptedException e){ }
}
}
};
は、クライアント側で、次のことが起こっている:
を私は問題を抱えてい場所{
...
payloads.add(payLoad)
/// Sleep until the server is done doing its logic with the payload
}
コメントビットです。私はクライアントスレッドがリクエストが処理されるまで待つメカニズムをどのように実装すればいいのか分かりません。いったんクライアントに返信を返す方法がわかりません。
私は消費者/プロデューサの問題を見て、待っている/通知するメカニズムなどを調べていますが、何もこの特定の問題に似ているようではありません。
ご協力いただければ幸いです。
*「私の理解によれば、多くのクライアントが利用可能なジョブを引き出し、結果を報告する必要がある間に、ジョブを保持して結果を収集するインスタンス(サーバー) 、 右? –
これは正しい – Dragan
OK、 "dispatcher"オブジェクトには2つのメソッド、 'take()'メソッド、コードには 'report(JobResult jr)'のような結果を返すメソッドが必要です。あなたがすでに持っているようにクライアントは仕事を得ます。彼らが終了したら、彼らは結果を報告し、 "ディスパッチャー"オブジェクトは結果とジョブとを一致させ、結果と関係があるものを実行しなければならない。 –