2011-07-20 47 views
0

背景高效TCP Server和Java中

在我的Java應用程序中的數據轉換,我有相當大量的數據坐在的ConcurrentHashMap的。

現在,當客戶端通過TCP端口連接到我的應用程序時,我需要以XML格式將此數據提供給客戶端客戶端。

所以簡而言之 - 我有一個客戶端連接到的TCP服務器。一旦客戶端連接,我必須讀取Map中的所有數據,並在TCP端口上以XML格式(自定義)將其吐出。 Map中的數據使用工作線程等從其他地方自動更新,因此我必須不斷地將新數據反覆發送到此tcp端口上的客戶端。

我想實現一個內存和CPU高效的解決方案 - 主要是我不希望在堆中生成太多不可變對象。 。

注:將來我可能不得不支持多種輸出格式(如逗號分隔或Json或HL7等)。爲了簡單起見,可以說客戶端可以連接一個特定格式的TCP端口。

問題

雖這麼說 - 我一直在四處尋找從一個ConcurrentHashMap到XML我TCP服務器執行和數據轉換過程中的最佳解決方案。

對於TCP服務器,人們談論

我的客戶將一些第三方的,所以我覺得KRY因爲客戶不會做Kryonet所需的「註冊」業務。那麼,從MINA和NETTY中,哪一個可以擴展並且更容易理解?任何其他建議?

對於從ConcurrentHashMap到XML的數據轉換,我正在考慮使用XSTREAM 任何其他建議?

感謝

回答

1

如果你有數百或連接的1000,你應該開始考慮可擴展性。但是,如果您的連接數量較少,則可能只需使用普通套接字。

如果只有一部分數據發生變化,您最好只發送已更改的數據,或者至少只重新生成已更改的XML。

1

它需要多快?看起來你應該能夠創建一些東西,使用tomcat和像spring-mvc這樣的標準框架,在不到10ms的時間內返回(加上RTT)。使用JAXB將對象轉換爲XML。如果你想支持像json這樣的其他輸出格式,那麼它很簡單(使用Jackson庫,API類似於JAXB)。

我有一個嘗試套接字服務器方法的同事,最後我們使用了tomcat,因爲它幾乎一樣快,QPS更穩定/可預測。

+0

:我的要求是不斷向連接的客戶端提供數據。理想情況下,客戶端可以連接數天,從服務器接收最新的數據。所以我不確定tomcat是否會這樣做。 – FatherFigure

+0

你應該看看阿卡。 – Kevin

+0

好的,謝謝,我會的 – FatherFigure