2012-09-13 57 views
4

我打算開發一款帶有多人遊戲功能的小型Android遊戲。我使用eNet庫在C++中創建了一個服務器框架,並且我想使用這個框架來構建服務器。網絡庫兼容C和Java

那麼,有沒有像eNet兼容Java和C++的網絡庫?我知道存在jEnet(但是已經過時了Java-enet-wrapper(https://github.com/csm/java-enet-wrapper),這是不成熟的。

回答

-1

你可以試試UDT:http://udt.sourceforge.net/

我有很好的成功使用它之前的Java和C之間的通訊++程序。

+0

謝謝。我要去看看。我也想嘗試使用j-enet(https://github.com/csm/java-enet.git)。任何人都知道j-enet的哪些版本與C++ enet兼容? – fabregot

+0

UDT不像enet。 UDT是以吞吐量爲導向的,如果您正在尋找吞吐量,那麼沒有什麼理由選擇TCP/IP上的UDP lib。此外,由於CPU負載的原因,UDT僅在有限的情況下有用。單次傳輸(即單個客戶端)通常會消耗四分之一以上的CPU(查看它)。在TCP上選擇UDP只有兩個原因,1)延遲,以及2)連接範圍(TCP具有1對1連接模型,其中UDP可以支持全部到全部)。面向吞吐量的服務通常以內容爲導向,這意味着它們兩者都不需要。 – JSON

+0

不要誤解我的意思,UDT以它自己的方式非常棒(我記得在不到一個小時的時間內讀了一些關於它用來傳輸超過1TB的地圖數據的東西,如果我沒有弄錯的話還是一個記錄),但是CPU成本高,延遲較差,不需要點對點類型的行爲。爲什麼選擇TCP over UDP,如果你不想尋找一種可擴展的低延遲解決方案,特別是TCP的更廣泛的連接能力? – JSON

0

退房https://github.com/julienr/libenet-android

ENET得多,你的情況不是UDT建議作爲UDT可以是處理器密集型遊戲服務對於許多連接至少是希望的,區別在於UDT實現擁塞控制升CPU的需求相對較高。 UDT非常棒,但是設計更適合長距離高帶寬大容量傳輸,而不是在遊戲中期望的小型高延遲事務。

另請注意,主流擁塞控制算法對小事務處理不好。他們通過監視事務中每個數據包的RTT和/或通過監視事務內的數據包丟失率來工作,當每個數據包平均只有1-2個數據包時,這是非常有用的。擁塞控制協議的額外需求將影響等待時間,即使擁塞控制本身在傳輸保持較小的情況下本身不太可能發生。