2013-06-27 19 views
1

我試圖遷移現有的NIO服務器代碼庫,具有以下特徵: - 在Selector控制下執行連接接受的單線程 - 執行套接字讀/寫的多個線程(一個線程:一個選擇器:一個SocketChannel的接受連接)多反應堆設計 - 我想重塑Netty嗎?

我想遷移到一個模型,其中單讀/寫線程可以有一個選擇器和多個可接受的SocketChannels可以註冊和註銷。這樣,一個線程就可以爲IO多路複用多個SocketChannel。

據我所知,這個模型將直接映射到Netty案例,其中有一個老闆線程和可配置的工人數量以及每個工人的多個連接數。 ExecutionHandler是正交的,所以我現在沒有把它帶入畫面。

具體問題: 我是重塑「的Netty」輪或者是有它預計將延遲敏感的地方連接可以去高達5000和二進制協議消息的匯率是一個服務器上面的方法有什麼區別預計將達到60-70K信息/秒?

據我所知,所提及的數字不會受到上述設計選擇的影響,而是其他因素。但更大的影響力可以通過設計選擇進行 - 至少這是我所相信的提前

回答

0

謝謝,我覺得你是重新發明。 Netty正是這樣做和更多。但是由於netty現在已經很好地模塊化了,如果你不想要其他的功能或者「包袱」,你甚至可以選擇netty的各個maven子模塊而不是整個東西。
從頭開始編寫的基本問題是,您可能會遇到很多netty已解決的問題,平臺問題,jdk解決方法等。
爲了記錄,我使用netty編寫的服務器可以輕鬆獲得上面提到的消息速率(實際上更多),但在4年前的centrino處理器筆記本電腦上測試時,我的客戶端數量更少(100)。
也許你應該從netty examples模塊中取一個例子,編寫你的5000連接客戶端,然後在你走下這條路徑之前測試延遲是否適合你。應該花幾個小時來做​​到這一點。

+0

謝謝@Abe。剛剛做到了這一點,我有一些旋鈕和幻燈片來調整和扭轉它。到目前爲止,我已經能夠將吞吐量從原始代碼的1.2K /秒提高到~12K /秒。但目標更高,並繼續描述瓶頸 – user1511595