私は現在Javaでクライアント/サーバアプリケーションを開発していますが、クライアントの設計方法については心配していません。Javaクライアントを設計する
現在、私は複数の接続を受け入れることができるサーバーを持っており、すべての接続にはループを持ち、コマンドをリッスンして応答します。サーバーは次のようになります。
try{
mIn = new DataInputStream(mSocket.getInputStream());
mOut = new DataOutputStream(mSocket.getOutputStream());
while(true){
byte tPackType = mIn.readByte();
switch(tPackType){
case PackType.LOGIN:
login();
break;
case PackType.REGISTER:
register();
break;
default:
}
}
}catch (IOException e){
mLog.logp(Level.WARNING, this.getClass().getName(), "run()", "IOException in run()", e);
}finally{
try{
mOut.close();
mIn.close();
mSocket.close();
}catch (IOException e){
e.printStackTrace();
}
}
ここで、クライアントは基本的にサーバーに要求を送信する多数のメソッドであり、応答を返します。私はサーバーから更新を受け取ることができるようにしたい。 私は解決策を見つけるのを助けることができる読書に関する提案を感謝します。 見ることができるパターンはありますか?
ありがとうございました。
オプション3は、クライアントがサーバーに接続してからサーバーが接続を介して更新を送信するまで待機することです。これにより、ポーリングは回避されますが、サーバーがクライアントへの接続を開始することも回避され、ファイアウォールが関与しているときに問題を引き起こす傾向があります。 (プラス奇妙です。) – Wyzard
@Wyzard:あなたを正しく理解していれば、クライアントはサーバー上のポートを開き、何もせずに開いたままにしますか? – npinti
*接続*を開きますが、はい。 (「ポートを開く」とは、着信接続をリッスンするか、接続を許可するようにファイアウォールを構成することを意味します)。クライアントはサーバーのアドレスを知っており、サーバーがクライアントのアドレスをすべて知っている必要がないため、アドレス。しかし、いったん接続されると、サーバーは更新がいつ送信される必要があるかを知り、クライアントはそれを知らない。したがって、サーバーは更新を開始します。 – Wyzard