私のサーバーには、TCP-IP ソケットでリッスンする一種のサービス アーキテクチャがあります。
messageType = protocolHandler.getMessageType();
ITaskProtocol serviceProtocol = serverServices.get(messageType);
if (p != null) {
String result = serviceProtocol.handleTask(protocolHandler);
}
特定のタスクのプロトコルをハッシュマップに保存しています。私の問題は、タスクを処理する必要があるプロトコルがinputStreamでバイトを見つけられないことです。inputStream と socked は「protocolHandler」の中にあります。
例:
public class ProtocolHandler implements ITaskProtocolHandler {
@Override
public int getMessageType() throws IOException {
return new DataInputStream(stream).readInt();
}
ただし、(デバッグのため) メッセージが送信されたことがわかります。また、プロトコル (サービス) がマップで見つかり、サービスの「handleTask(...)」メソッドが呼び出されました。ただし、バイトが失われ、プロトコルが相互に待機しているため、サービスはメッセージを受け取りません。
私の推測では、サービスの検索に時間がかかりすぎて、その間にメッセージが失われていると思われます。
重要な情報: 機能している場合もあれば、機能していない場合もあります。クライアントとサーバーが同じ PC で実行されている場合、おそらくスレッドの問題です。
クライアント プロトコル:
clientWorker.send(ServerProtocol.MessageRequestType.JoinTopicRequest.getRequestNumber());
clientWorker.send("some xml-message");
サーバー サービス プロトコル:
public String handleTask(ITaskProtocolHandler protocolHandler) throws Exception {
Message m = protocolHandler.getMessage());
アーキテクチャの何が問題になっていますか?
どうもありがとう!