網遊訊息同步

2021-10-09 19:57:50 字數 1133 閱讀 5529

遊戲中的通訊協議和傳統的協議沒有太多不一樣的地方,只不過遊戲會有一些習慣做法。

按照遊戲需求來設計協議就好了。如果沒經驗不清楚具體場景,以下做個拋磚引玉:

遊戲登入

初始化客戶端通常會在這一步先把一些環境引數傳遞給服務端,如使用者id、token(接入第三方運營商的可能會有)、時間截等。

登陸向遊戲伺服器發起登陸請求,使用者名稱,token, 此時可能會附帶要登入的區/服id.

遊戲副本

請求進入副本

客戶端攜帶需要進入的副本id,向服務端請求進入。服務端檢查玩家是否符合進入條件,符合的情況下會為副本分配記憶體,之後可以直接走一般遊戲場景切換協議。

副本結束通知

會根據不同型別的遊戲副本設計,有些是玩家主動退出的,有些是因為副本的失敗條件服務端主動強制退出的。

玩家行為同步

位置同步

如果是那種允許滑鼠指定目的地同時也允許方向鍵操作的遊戲,可考慮設計兩種同步協議。

滑鼠指定移動目標並且由客戶端尋路的情況下,由伺服器同步給周圍的其它玩家。其它玩家的客戶端執行尋路操作;如果是服務端尋路則同步移動的路徑給客戶端。

使用方向鍵/手柄的情況下則在不同的時機傳送移動請求。如從待機到開始移動時、改變移動方向時、釋放移動按鍵時。這種情況下如果服務端沒有地形資訊,並且正在移動的玩家遇到網路延遲,發出了開始移動的請求卻沒成功發出結束移動的請求,就會容易出現跑到地圖外面的情況。改善的方法是在關鍵幀進行同步請求。

行為同步

玩家執行某個可視動作的時候向周圍的人同步你的行為。如發起某個技能時,向服務端請求你要發起的技能id,服務端檢查魔法值、冷卻時間等前置條件,成功後同步給周圍所有人,不成功則返回錯誤碼。

玩家視野

受限於負載因素,遊戲中通常會劃分乙個邏輯上的視野。比如說角色在移動的情況下,只有以它為中心的n*n個單位的區域內的玩家才可以收到同步資訊。而此範圍外的玩家則不會收到協議(不同解析度下這個範圍的大小可能不同)。

幀間同步模式: 幀鎖定同步演算法

玩法規避模式:網路遊戲同步法則

**插值模式:影子跟隨演算法

提高傳輸速度: 快速可靠傳輸協議

網遊同步中的時間感

網遊同步中的時間感 金慶的專欄 2018.1 時間知覺 temporal perception 對客觀現象的延續性和順序性的反應。實際上是對事件和運動的知覺。網遊時間以伺服器的為準。網遊客戶端落後伺服器例如1幀時間,所以表現的是過去的場景。因為玩家自身的行為是已知的,所以本地可以 自身角色的狀態,超...

同步訊息和非同步訊息

同步訊息和非同步訊息區別 兩者使用場景不一樣,比如說a給b傳送一封電子郵件,a是不需要知道b是否收到就可以了的,把自己的資訊傳達出去,這樣的場景就是非同步訊息。因為在這個過程中a在乎的是把某件事情傳達出去就可以,而不必在乎其他人的狀態,比如張貼告示也是這樣,不需要知道每個人都是否知道這則告示的內容,...

spring jms同步訊息處理

spring框架中直接封裝了jms的處理。在處理jms訊息時會更加方便。spring處理同步訊息時採用的jmstemplate的方法。配置檔案如下,封裝activemq的方法 同步接收的 如下,因為需要對接收到的訊息進行處理,所以重寫的jmstemplate的execute方法 序列化成string...