介紹
安裝
請參考Compiler Setup頁,有什么問題在這塊有解答。如果有額外的問題參考FAQ,http://www.jenkinssoftware.com,或者郵件聯系我們。高級用戶可以直接跳轉到Code tutorial。初學者或想要多了解點RakNet的請繼續閱讀。
API描述
RakNet致力於網絡和網絡相關服務的游戲引擎。不僅包含了網絡通信,也包括游戲級別復制,補丁升級,NAT穿透,和語音聊天。RakNet可以用於任何的應用,且可以與其他任何使用了RakNet的系統通信,不論它們位於同一個計算機,跨LAN,或跨Internet。盡管RakNet可以用於任何的網絡應用,但是它主要致力於在線游戲,實現了網絡游戲的共同功能需求;為了方便在線游戲編程提供了一些額外的功能。
網絡101
游戲網絡連接通常有兩種類別:端到端模式和服務器/服務器模式。每一種模式以各種不同的方式和各種協議實現。然而,RakNet支持任意拓撲。
一般來講,具有最好網絡連接的最快的計算機應該充當服務器,其他的計算機作為客戶端。
盡管有許多類型的編碼數據包的方法,它們或者按照UDP數據包或者按照TCP數據包。TCP用於傳輸文件非常好,但是不太適合於游戲。使用TCP常常有延遲(導致游戲有很大延遲),並且是以流的形式到達,而不是數據包(這樣你必須實現你自己的分包機制)。UDP包就比較好了,UDP包立即發送,並且是以包的形式發送,可以很容易區分數據。然而,額外的靈活性卻帶來了各種問題:
1. UDP包並不保證到達。你可能可以接收到所有發送的數據包,或者一個也接收不到,或發送數據包的一部分。
2. UDP數據包不保證按序到達。這在編程游戲時是很大的問題。例如你可能會在接收到一個坦克生成的消息之前,接收到一條坦克損毀的消息。
3. UDP數據包保證到達的正確性,但是並不能保證到達的數據不受黑客篡改。
4. UDP包並不需要接受連接。起初這個聽起來還不錯哦,但是當你意識到沒有連接的保護時,游戲很容易遭到黑客時,就不會這么想了。例如,如果你有一個消息“Give such and such invulnerability”,黑客可以復制這條消息,每次在他們想要不受傷害時,可以將這條消息發送服務器。
5. UDP傳輸沒有提供流控制或聚合,那可能過度發送復制件,不能有效數據發送。
RakNet如何幫助解決這些問題?
在最底層,RakNet’s 的端到端類,RakPeerInterface在UDP數據包之上提供了一層,透明地處理這些問題。使得編程者可以集中精力於游戲而不是通信引擎。
1. RakNet可以自動重發沒有到達的數據
2. RakNet可以有效地自動排序到達的失序數據包。
3. RakNet可以保護傳輸的數據,如果數據遭到篡改,可以通知編程人員。
4. RakNet提供了一個快速,簡單,連接層,它阻塞了未授權的傳輸。
5. RakNet透明地處理網絡問題,例如流控制和聚合。
當然了,如果RakNet沒能夠很有效的處理這些問題,例如發送大量數據,使用阻塞操作上鎖,或讓RakNet很難利用這些優勢,它也不會有如此多的應用。幸好情況不是這樣的。
與其他的網絡API不同:
1. RakNet在發送的數據中加入的控制數據非常少。
2. RakNet不會導致你不適用的功能的額外消耗。
3. RakNet有即時的連接與斷開連接。
4. RakNet並不會假設網絡是可靠的。RakNet會很好地處理連接問題,而不是僅僅阻塞,上鎖或崩潰。
5. RakNet已經成功地用於很多游戲。事實證明它很好用。
6. RakNet很容易使用。
7. RakNet的文檔很全面。每一個頭文件有每一個類和函數的文檔。也有Doxygen參考手冊和HTML幫助文檔。
RakNet可以為我們做哪些工作?
RakNet工作在字節流一層,帶寬是很有效的,但是在你擁有較大控制權時,也要付出時間消耗的代價。RakNet提供了許多功能使得網絡更加容易,包括遠程調用,BitStream類,和自動對象同步。
大多數的游戲共享一組共同的功能,例如設置游戲玩家限制,密碼生成,以及統計數據。RakNet博鰲擴所有這些功能,且又其他額外的功能。如果游戲需要使用RakNet,要檢查RakNet還沒有集成到你的游戲中。
最后,RakNet包含了一小組程序需要與你的游戲連接工作,例如主服務器或實時語音。
如下列出了一些你在RakNet之外可以做的一些工作:
1. 實現低帶寬語音通信
2. 運行一個主服務器用於玩家尋找網絡上的游戲。
3. 使用遠程功能調用,允許你用變量參數調用其他計算機上的函數。
4. 獲得統計數據,例如ping,包丟失,發送字節數,接收字節數,發送數據包,接收到的數據包數量,或其他更多的數據。
5. 每個數據包中可選的時間戳可以讓你十分准確地知道一個動作是多長時間以前在另外的一個系統上執行的,盡管ping很流暢。