淺談moba游戲的技術和需求(2)

主流的moba在傳輸層協議上采用udp,上層實現tcp的一些功能,以及通過一定的冗余數據保證盡量少的重傳發生,如果非要才用tcp,也有一些對優化辦法,
其次很多都是建議moba采用定點,但是定點的數學庫麻煩,很多都要自己重寫,如果非要采用浮點也有一些辦法。
下面主要針對這2點進行討論。

  • 網絡
    由于tcp經典重傳算法是指數退避的形式,當丟失包時,重傳很慢,導致延遲很高。但是tcp也提供了快速重傳方法,dupAck幾次后,不等定時器到期就立馬傳送。但是沒在移動端找到對應api,一般客戶端只支持開啟TCP_NODELAY來關閉negal算法,其他一些tcp選項并沒移植過來,但是服務器開啟快速重傳起碼可以保證服務器到客戶端傳輸的效率提升,就可以保證總體延遲的降低。還有因為移動端的api不支持sack重傳,否則還可以繼續提升傳輸效率。用tcp限制實在很大,可優化的空間極其有限,而且現在有成熟udp的kcp+fec的解決方案,所以推薦用udp來解決。

  • 浮點定點
    在幀同步中,網上很多解決方案都是基于定點的,而且校驗客戶端的作弊行為,通過把地圖中所有實體的屬性求去哈希值,發給服務器,然后服務器判定不一致的客戶端為作弊客戶端,這個是基于大部分客戶端不作弊的情況,當然如果有多個作弊客戶端匹配進入地圖,這種辦法就失效了,不過避免多個可能的作弊客戶端進入地圖,那是匹配模塊該考慮的事情,不是戰斗模塊該考慮的了。這種防作弊方法如果其中一臺機器浮點標準不一致,會把正??蛻舳苏`判成為作弊客戶端的。
    做游戲本質是做工程并不是做科學,所以允許部分誤差,比如怪物血量100,最終浮點計算傷害出了99.999還是100.000,這個都算怪物死亡,并不會影響游戲的進程,除非浮點誤差積累了很多,然后導致影響游戲進程了,不過這個是小概率事件,可以不用考慮。但是一旦有了浮點誤差后,上述通過計算哈希值的辦法就失效了,所以判斷客戶端是否作弊就應該換個方法了??梢酝ㄟ^用“偽隨機數”的方法,隨機算法固定,隨機種子固定,那么產生的隨機序列一定是一樣的。
    每個客戶端的隨機種子一致,因為服務器下發的,然后每次在游戲進程改變(比如怪物死亡,人物死亡,添加技能,或者添加buff之類)的地方調用一次隨機,那么在一定的幀數調用一次隨機數然后上傳給服務器,服務器來判斷作弊玩家。這種做法也是基于“有玩家作弊,一定會導致游戲進程發生變化,然后導致每個客戶端在特定幀,隨機的次數不一致,最終產生的隨機數不同”。通過這種辦法算比較完美的解決了客戶端使用定點數的問題,客戶端開發可以很開心的用各種系統自帶的數學庫了。
    上述的防作弊方法是針對修改屬性之類的作弊方法,由于幀同步所有的邏輯和數據都在客戶端,但是一些只是修改客戶端顯示的作弊方法(比如moba全圖掛,fps的透明掛)就比較難防。所以特定的時刻,比如被舉報過的玩家或者ip,下次在開游戲時,服務器一定要跑邏輯,客戶端變的純顯示,當然服務器跑戰斗邏輯對服務器負擔是很嚴重的,一般一局moba中,最高的實體個數有幾十個,沒做aoi的情況,戰斗的計算以及網絡消息的廣播多會導致cpu負擔很大,戰斗用c++來編寫單cpu只能同時跑十幾局戰斗,在優化也只能通過改變更合適的戰斗算法以及使的代碼的局部性更高來優化了。不過這個也基本足夠了,16核心機器,一次可以跑幾百局邏輯了,而且這個只是針對作弊玩家的在次校驗。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容

  • 談技術前,先來談談手機moba游戲的技術需求。1.手機moba游戲對延遲很敏感,因為延遲高低直接決定游戲對可操作性...
    Teech閱讀 997評論 0 0
  • 1、TCP狀態linux查看tcp的狀態命令:1)、netstat -nat 查看TCP各個狀態的數量2)、lso...
    北辰青閱讀 9,474評論 0 11
  • 幀同步在網上可以搜的資料比較少,關于游戲的更是沒有,不過,實現的原理也比較簡單,最近幾天就寫了份關于幀同步的文檔,...
    某人在閱讀 5,075評論 2 12
  • 1.TCP報頭格式 UDP報頭格式 TCP報頭格式 UDP報頭格式 具體的各部分解釋看 TCP報文格式詳解 - ...
    杰倫哎呦哎呦閱讀 2,493評論 0 5
  • 1.全部閱讀書籍的名稱 字數 2.日志單完成情況 3.預習課文情況(包括朗讀 字帖 聽寫) 4.其他成長關鍵點 首...
    Ryanta閱讀 112評論 0 0