2011-07-21 84 views
0

我在編寫一個java程序,需要在整個應用程序運行過程中不斷接受序列化對象。對象由用戶請求的服務器發送。TCP客戶端接受對象

我的主應用程序在其run方法中初始化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網絡newbees上拋出NIO可能會導致更多的洞察力。 [2c /溫柔的語氣] – alphazero

0

我會建議你的run()方法讀取所有對象並將它們添加到隊列中。 getOject()從隊列中獲取下一個對象。 您也可以通過int queueLength()來檢查任何人在等待。

+1

非常感謝你! – emily