《網路多人遊戲架構與程式設計》之序列化、RPC、網路拓撲
阿新 • • 發佈:2022-05-27
///////////////////////////////////// 對 象 序 列 化 //////////////////////////////////////////////////
Q.什麼是序列化?
序列化 是一種將 物件 從 記憶體中 的 隨機訪問格式 轉換為 位元流格式 的 行為。這些位元流可以在硬碟上儲存,也可以通過網路傳輸,之後再恢復成原始格式。
Q.什麼是流?
流stream 是一種資料結構,封裝了一組有序的資料元素,並允許使用者對其進行讀寫。流可以是輸出流(允許順序插入但不許讀取)、輸入流(允許順序提取但不許插入),或者輸入輸出流。
Q.什麼是位元組序?不同平臺怎麼保證位元組序?
位元組序 是 位元組 在一個平臺上的 儲存順序。有小端位元組序(低位編址) 和 大端位元組序(高位編址)。可以通過位元組交換演算法或內部函式和彙編指令。
Q.怎麼壓縮資料?
唯一標識複製物件;
指明被複制物件的型別。
世界狀態增量:傳送方建立表示世界狀態變化的資料包,然後接收方在自己的世界狀態中更新這些變化。每個資料包都包含世界狀態增量。
物件狀態增量:世界狀態增量包含需要改變的每個物件的物件狀態增量(建立、更新、銷燬遊戲物件)。
區域性物件狀態的複製:列舉值可以通過按位或運算組合在一起表示多個屬性。
遠端過程呼叫 RPC:一臺主機可以在另一臺或多臺遠端主機上執行程式的動作。每個呼叫都可以被認為是 一個唯一的物件,每個引數對應一個成員變數。
遠端方法呼叫 RMI :主機在一個特定物件上呼叫一個方法。
————————————————————————
總結:
- 去除任何不需要通過網路傳送的資料,例如稀疏的不被完全填充的資料結構。
- 熵編碼:比如用bool值同義表達int值。
- 定點:所有可能取值總數=(最大值-最小值)/精度+1 , 需要log2(所有可能取值總數)位。
- 幾何壓縮:四元數只傳3個分量,剩下那個可以用1-其他分量得到。
///////////////////////////////////////////// 對 象 復 制 ////////////////////////////////////////////////
作用:支援遠端程序之間遊戲世界和物件狀態的同步。 複製:從一臺主機向另一臺主機傳輸物件狀態的行為。 複製預處理:- 標記資料包為包含物件狀態的資料包;
- 建立1個列舉型別,來標識每個資料包的型別。
- 接收方從資料包中讀取資料包型別,然後決定如何處理。
- 習慣上,主機之間交換的第一個資料包被標記為"hello"資料包,用於建立連線、分配狀態。
- 接收方根據標識,確認是否有這個傳入物件的副本。有,直接更新;沒有,例項化一個物件。
- 應用層協議必須定義所有可能的資料包型別。
- 每個物件需要一個唯一的識別符號。
- 物件的類需要一個唯一的識別符號,這樣接收不存在該物件時可以建立該物件。
- 網路程式碼不依賴遊戲類,所以使用間接對映來向網路模組註冊類和建立函式。
- 大規模的遊戲無法將所有物件的複製裝入一個數據包,所以使用一個協議來支援世界狀態增量的傳輸。
- 為了提高效率,更新物件動作所傳送的序列化資料可以是物件屬性的子集。
- 除了複製物件狀態資料,有時還需要觸發遠端過程呼叫。
- 只運行遊戲狀態並與所有客戶端通訊。
- 專用伺服器的程序與客戶端程序是完全分開的。
- 無外設,不顯示任何影象。
- 允許在一臺高效能運算機上執行多個專用伺服器。
- 端可以即作為客戶端也作為服務端。
- 優點:降低部署成本,不需要租用伺服器。
- 缺點:端的效能必須足夠高,需要足夠快的網路連線以應付伺服器的額外負載;玩家惡意退出或網路不佳,都非常影響遊戲進行。
- 監聽伺服器不等於對等網路連線,應該是對等託管,有伺服器,但是由玩家託管。