2012-05-11 41 views
0

在構建java套接字服務器時,我一直在閱讀過去幾天關於io和nio之間的區別。對於我的使用,我需要一個可以運行大量連接和離子的服務器來應對這個伎倆。 我唯一的擔心是,它實施起來要慢一些,而且難以實現,而不是爲每個連接運行一個線程。所以我想爲什麼不使用相同的線程和java.nio的邏輯,並建立一個服務器有一個線程,檢查所有打開的連接,當有新事件時,它會打開一個新的線程來處理它。我以這種方式認爲我享受這兩個世界......你有什麼建議?爲套接字服務器實現我自己的java.nio

+0

有像netty和灰熊這樣的多個高性能nio庫,它們應該適合你。 – Bill

回答

0

NIO幾乎完全依賴於JNI,所以如果你想再次實現它,你實際上必須編寫大量的C/++和OS API接口代碼。

我認爲現有的Java實現已經相當不錯了。例如,Selector類將系統調用包裝爲等待多個文件描述符。幾乎沒有什麼可以提高效率的。

0

我建議你不理解NIO的要點,即只使用一個線程。這當然是複雜的,並且在1000名客戶以下是否有任何需求可能是有爭議的,可能是10,000,甚至可能是100,000。我會用java.net實現你的服務器,讓它運行併爲階段2保存java.nio,如果你到達那裏並證明你確實需要它。

編輯:我肯定會忘記這個滾動自己的概念。你大大低估了這項任務(Sun 1.4.0,1.4.1,1.4.2在它確實正常工作之前),而你似乎正在瞄準兩全其美。因爲沒有更多的東西,所以你不能比Sun用java.nio做更多的事情。可以說少一點;-)

+0

首先它是一個好主意。第二我可以在一個線程中完成所有操作。是不是那個妞呢?爲每個tesk運行一個新線程並在之後進行cloae? –

+0

@AsafNevo您需要爲java.net每個連接創建一個單獨的線程。 – EJP

相關問題