我目前正在開發一個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();
}
}
現在,客戶基本上只是一個數字的向服務器發送一個請求方法和返回響應。我希望能夠從服務器接收更新。 我會很感激任何關於閱讀的建議,可以幫助我找到解決方案。 有沒有我可以看到的模式?
謝謝你,veLr。
選項3是客戶端連接到服務器,但等待服務器通過連接發送更新。這樣可以避免輪詢,還可以避免服務器啓動連接回客戶端,這在涉及防火牆時往往會導致問題。 (加上它很奇怪。) – Wyzard 2012-03-29 08:42:30
@Wyzard:如果我正確理解你,你希望客戶端在服務器上打開一個端口並保持打開狀態而不做任何事情? – npinti 2012-03-29 08:45:00
打開*連接*,但是。 (「打開端口」意味着要麼監聽傳入的連接,要麼配置防火牆以允許通過連接。)客戶端啓動連接,因爲它知道服務器的地址,服務器不需要知道所有客戶端的連接,地址。但是一旦連接,服務器就知道什麼時候需要發送更新,而客戶端不知道。所以服務器啓動更新。 – Wyzard 2012-03-29 08:51:18