2010-08-22 68 views
1

我已經使用在一個端口上運行的serversocketchannels構建了一個java TCPServer。然而,它並不是非常具有伸縮性,因爲它僅涉及一個傳入套接字(阻塞模式)。可以將Java非阻塞用於所描述的應用程序嗎?

我想擴展此TCPServer以服務多個傳入套接字(最多10個傳入套接字)。因此,我想知道我是否應該使用非阻塞io來實現TCPServer,或者使用線程+阻塞io。

回答

0

Paul Tyma最近compared這兩種方法,生成diversediscussion。在某些情況下,現代線程庫可以勝過java.nio.channels.Selector。結果有點違反直覺,你可能不得不原型來得到明確的答案。

+0

我完全同意。原型確實需要得到明確的答案。我之前正在使用一個傳入套接字來處理InputStream。我很困惑地發現InputStream無法正常工作。我會錯過傳入的數據,重複傳入的數據。 然後,我轉移到渠道和中提琴!都很好。 – Poliquin 2010-08-22 08:29:10

+0

這隻能是您的原始代碼中的編碼錯誤。 TCP不會丟失數據,InputStream也不會丟失數據。否則,例如這個論壇不會工作。 – EJP 2010-08-22 08:52:25

+0

嗯......我實現了我的僞代碼到Java和C#。 C#完美地接收了傳入的數據,但是在使用InputStream和java時卻不一樣。 Java(使用InputStream)沒有收到所有傳入的數據,並且在某些情況下收到了重複的數據。 Java(與渠道)工作正常。 – Poliquin 2010-08-22 15:28:43

0

JBoss-Netty或Apache-Mina是nio框架,它提供了很多東西來實現你自己的服務器。所以,現在我使用netty並且很滿意。

+0

謝謝secmask!我也在尋找Apache Mina。在考慮Apache-Mina之前,我希望能夠在現有的Java類中耗盡所有的線索。 – Poliquin 2010-08-22 08:25:50

0

只有10個輸入插座,我不認爲效果很明顯。你應該做的是專注於上層(協議,應用程序),並將低層網絡實現留給框架。我會爲該工作推薦Apache Mina。正如你將會看到的那樣,我可以非常好地阻止或阻止你的工作,你可以選擇;併爲您留下開放的接口來實施協議&應用程序。

+0

我會在Apache Mina上工作。謝謝instcode! – Poliquin 2010-08-22 08:29:47

0

我會使用線程和阻塞I/O,直到您知道您至少有1000個併發連接。這也給你一個簡單的方法來讓它工作。如果你達到1000,評估。

+0

我會那樣做的。 :P謝謝EJP! – Poliquin 2010-08-22 08:26:44

相關問題