偶的伺服器:nio,困惑!

sisi_622發表於2006-06-28
偶的專案要求伺服器支援2000個連線併發: (1)全雙工的 (2)長連線的。也許錯誤選擇了java,又錯誤使用了nio.
(1)連線數太大,偶用了執行緒池和nio.
(2)每100個連線分配一個MsgMgr,每個MsgMgr又開了三個執行緒:分別處理收,發和處理訊息。
(3)因考慮到雙工,偶每個MsgMgr使用兩個selector:即每個socketchannel向兩個selector分別註冊讀、寫interOps.
(4)偶又開了一個執行緒序分配一個selector處理連線事件。
這樣設計是否有問題,因偶覺得匯流排程數目太大,效能很差。
偶關於nio還有下面的問題,需要請教大家。
(1)一個selector在windows下好象只支援64個連線的併發,那是否意味著偶在windows下一個selector最多能被64個socketChannel註冊?(確實有64個socketChannel同時讀寫的可能)。
(2)讀寫分開用selector有什麼弊端,JVM支援selector的數目是否有限制,因為我發現每selector.open()會開啟很多的監聽埠

,請問nio為何要這麼做??
(3)因偶是長連線,所以對每個socketchannel都要不停發beatMsg,按說這應該在MsgMgr中再開一beatThread,但偶覺得執行緒數目太龐大了,想將其放在處理執行緒中,是否會影響處理訊息的速度,有什麼解決辦法?
偶經驗不足,希望大家幫忙提些建議。多謝!

相關文章