青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011


專注即時通訊及網游服務端編程
------------------------------------
Openresty 官方模塊
Openresty 標準模塊(Opm)
Openresty 三方模塊
------------------------------------
本博收藏大部分文章為轉載,并在文章開頭給出了原文出處,如有再轉,敬請保留相關信息,這是大家對原創作者勞動成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 219730
  • 排名 - 117

最新評論

閱讀排行榜

摘要: 本文作為游戲服務器端開發的基本大綱,是游戲實踐開發中的總結。第一部分專業基礎,用于指導招聘和實習考核, 第二部分游戲入門,講述游戲服務器端開發的基本要點,第三部分服務端架構,介紹架構設計中的一些基本原則。希望能幫到大家

一 專業基礎

1.1 網絡

1.1.1 理解TCP/IP協議
網絡傳輸模型
滑動窗口技術
建立連接的三次握手與斷開連接的四次握手
連接建立與斷開過程中的各種狀態
TCP/IP協議的傳輸效率
思考

1)請解釋DOS攻擊與DRDOS攻擊的基本原理
2)一個100Byte數據包,精簡到50Byte, 其傳輸效率提高了50%
3)TIMEWAIT狀態怎么解釋?
1.1.2 掌握常用的網絡通信模型
Select
Epoll,邊緣觸發與平臺出發點區別與應用
Select與Epoll的區別及應用
1.2 存儲
計算機系統存儲體系
程序運行時的內存結構
計算機文件系統,頁表結構
內存池與對象池的實現原理,應用場景與區別
關系數據庫MySQL的使用
共享內存
1.3 程序
對C/C++語言有較深的理解
深刻理解接口,封裝與多態,并且有實踐經驗
深刻理解常用的數據結構:數組,鏈表,二叉樹,哈希表
熟悉常用的算法及相關復雜度:冒泡排序,快速排序

二 游戲開發入門

2.1防御式編程
不要相信客戶端數據,一定要檢驗。作為服務器端你無法確定你的客戶端是誰,你也不能假定它是善意的,請做好自我保護。(這是判斷一個服務器端程序員是否入門的基本標準)
務必對于函數的傳人參數和返回值進行合法性判斷,內部子系統,功能模塊之間不要太過信任,要求低耦合,高內聚
插件式的模塊設計,模塊功能的健壯性應該是內建的,盡量減少模塊間耦合
2.2 設計模式
道法自然。不要迷信,迷戀設計模式,更不要生搬硬套
簡化,簡化,再簡化,用最簡單的辦法解決問題
借大寶一句話:設計本天成,妙手偶得之
2.3 網絡模型
自造輪子: Select, Epoll, Epoll一定比Select高效嗎?
開源框架: Libevent, libev, ACE
2.4 數據持久化
自定義文件存儲,如《夢幻西游》
關系數據庫: MySQL
NO-SQL數據庫: MongoDB
選擇存儲系統要考慮到因素:穩定性,性能,可擴展性
2.5 內存管理
使用內存池和對象池,禁止運行期間動態分配內存
對于輸入輸出的指針參數,嚴格檢查,寧濫勿缺
寫內存保護。使用帶內存保護的函數(strncpy, memcpy, snprintf, vsnprintf等),嚴防數組下標越界
防止讀內存溢出,確保字符串以’\0’結束
2.6 日志系統
簡單高效,大量日志操作不應該影響程序性能
穩定,做到服務器崩潰是日志不丟失
完備,玩家關鍵操作一定要記日志,理想的情況是通過日志能重建任何時刻的玩家數據
開關,開發日志的要加級別開關控制
2.7 通信協議
采用PDL(Protocol Design Language), 如Protobuf,可以同時生成前后端代碼,減少前后端協議聯調成本, 擴展性好
JSON,文本協議,簡單,自解釋,無聯調成本,擴展性好,也很方便進行包過濾以及寫日志
自定義二進制協議,精簡,有高效的傳輸性能,完全可控,幾乎無擴展性
2.8 全局唯一Key(GUID)
為合服做準備
方便追蹤道具,裝備流向
每個角色,裝備,道具都應對應有全局唯一Key
2.9 多線程與同步
消息隊列進行同步化處理
2.10 狀態機
強化角色的狀態
前置狀態的檢查校驗
2.11 數據包操作
合并, 同一幀內的數據包進行合并,減少IO操作次數
單副本, 用一個包盡量只保存一份,減少內存復制次數
AOI同步中減少中間過程無用數據包
2.12 狀態監控
隨時監控服務器內部狀態
內存池,對象池使用情況
幀處理時間
網絡IO
包處理性能
各種業務邏輯的處理次數
2.13 包頻率控制
基于每個玩家每條協議的包頻率控制,癱瘓變速齒輪
2.14 開關控制
每個模塊都有開關,可以緊急關閉任何出問題的功能模塊
2.15 反外掛反作弊
包頻率控制可以消滅變速齒輪
包id自增校驗,可以消滅WPE
包校驗碼可以消滅包攔截篡改
圖形識別嗎,可以踢掉99%非人的操作
魔高一尺,道高一丈
2.16 熱更新
核心配置邏輯的熱更新,如防沉迷系統,包頻率控制,開關控制等
代碼基本熱更新,如Erlang,Lua等
2.17 防刷
關鍵系統資源(如元寶,精力值,道具,裝備等)的產出記日志
資源的產出和消耗盡量依賴兩個或以上的獨立條件的檢測
嚴格檢查各項操作的前置條件
校驗參數合法性
2.18 防崩潰
系統底層與具體業務邏輯無關,可以用大量的機器人壓力測試暴露各種bug,確保穩定
業務邏輯建議使用腳本
系統性的保證游戲不會崩潰
2.19 性能優化
IO操作異步化
IO操作合并緩寫 (事務性的提交db操作,包合并,文件日志緩寫)
Cache機制
減少競態條件 (避免頻繁進出切換,盡量減少鎖定使用,多線程不一定由于單線程) 多線程不一定比單線程快
減少內存復制
自己測試,用數據說話,別猜
2.20 運營支持
接口支持:實時查詢,控制指令,數據監控,客服處理等
實現考慮提供Http接口
2.21 容災與故障預案

三 服務器端架構

3.1 什么是好的架構?
滿足業務要求
能迅速的實現策劃需求,響應需求變更
系統級的穩定性保障
簡化開發。將復雜性控制在架構底層,降低對開發人員的技術要求,邏輯開發不依賴于開發人員本身強大的技術實力,提高開發效率
完善的運營支撐體系
3.2 架構實踐的思考
簡單,滿足需求的架構就是好架構
設計性能,抓住重要的20%, 沒必要從程序代碼里面去摳性能
熱更新是必須的
人難免會犯錯,盡可能的用一套機制去保障邏輯的健壯性

游戲服務器的設計是一項頗有挑戰性的工作,游戲服務器的發展也由以前的單服結構轉變為多服機構,甚至出現了bigworld引擎的分布式解決方案,最近了解到Unreal的服務器解決方案atlas也是基于集群的方式。

負載均衡是一個很復雜的課題,這里暫不談bigworld和atlas的這類服務器的設計,更多的是基于功能和場景劃分服務器結構。

首先說一下思路,服務器劃分基于以下原則:

  1. 分離游戲中占用系統資源(cpu,內存,IO等)較多的功能,獨立成服務器。
  2. 在同一服務器架構下的不同游戲,應盡可能的復用某些服務器(進程級別的復用)。
  3. 以多線程并發的編程方式適應多核處理器。
  4. 寧可在服務器之間多復制數據,也要保持清晰的數據流向。
  5. 主要按照場景劃分進程,若需按功能劃分,必須保持整個邏輯足夠的簡單,并滿足以上1,2點。

服務器結構圖:


各個服務器的簡要說明:

Gateway 是應用網關,主要用于保持和client的連接,該服務器需要2種IO,對client采用高并發連接,低吞吐量的網絡模型,如IOCP等,對服務器采用高吞吐量連接,如阻塞或異步IO。

網關主要有以下用途:

  1. 分擔了網絡IO資源
  2. 同時,也分擔了網絡消息包的加解密,壓縮解壓等cpu密集的操作。
  3. 隔離了client和內部服務器組,對client來說,它只需要知道網關的相關信息即可(ip和port)。
  4. client由于一直和網關保持常連接,所以切換場景服務器等操作對client來說是透明的。
  5. 維護玩家登錄狀態。

World Server 是一個控制中心,它負責把各種計算資源分布到各個服務器,它具有以下職責:

  1. 管理和維護多個Scene Server。
  2. 管理和維護多個功能服務器,主要是同步數據到功能服務器。
  3. 復雜轉發其他服務器和Gateway之間的數據。
  4. 實現其他需要跨場景的功能,如組隊,聊天,幫派等。

Phys Server 主要用于玩家移動,碰撞等檢測。

所有玩家的移動類操作都在該服務器上做檢查,所以該服務器本身具備所有地圖的地形等相關信息。具體檢查過程是這樣的:首先,Worldserver收到一個移動信息,WorldServer收到后向Phys Server請求檢查,Phys Server檢查成功后再返回給world Server,然后world server傳遞給相應的Scene Server。

Scene Server 場景服務器,按場景劃分,每個服務器負責的場景應該是可以配置的。理想情況下是可以動態調節的。

ItemMgr Server 物品管理服務器,負責所有物品的生產過程。在該服務器上存儲一個物品掉落數據庫,服務器初始化的時候載入到內存。任何需要產生物品的服務器均與該服務器直接通信。

AIServer 又一個功能服務器,負責管理所有NPC的AI。AI服務器通常有2個輸入,一個是Scene Server發送過來的玩家相關操作信息,另一個時鐘Timer驅動,在這個設計中,對其他服務器來說,AIServer就是一個擁有很多個NPC的客戶端。AIserver需要同步所有與AI相關的數據,包括很多玩家數據。由于AIServer的Timer驅動特性,可在很大程度上使用TBB程序庫來發揮多核的性能。

把網絡游戲服務器分拆成多個進程,分開部署。這種設計的好處是模塊自然分離,可以單獨設計。分擔負荷,可以提高整個系統的承載能力。

缺點在于,網絡環境并不那么可靠。跨進程通訊有一定的不可預知性。服務器間通訊往往難以架設調試環境,并很容易把事情攪成一團糨糊。而且正確高效的管理多連接,對程序員來說也是一項挑戰。

前些年,我也曾寫過好幾篇與之相關的設計。這幾天在思考一個問題:如果我們要做一個底層通用模塊,讓后續開發更為方便。到底要解決怎樣的需求。這個需求應該是單一且基礎的,每個應用都需要的。

正如 TCP 協議解決了互聯網上穩定可靠的點對點數據流通訊一樣。游戲世界實際需要的是一個穩定可靠的在游戲系統內的點對點通訊需要。

我們可以在一條 TCP 連接之上做到這一點。一旦實現,可以給游戲服務的開發帶來極大的方便。

可以把游戲系統內的各項服務,包括并不限于登陸,拍賣,戰斗場景,數據服務,等等獨立服務看成網絡上的若干終端。每個玩家也可以是一個獨立終端。它們一起構成一個網絡。在這個網絡之上,終端之間可以進行可靠的連接和通訊。

實現可以是這樣的:每個虛擬終端都在游戲虛擬網絡(Game Network)上有一個唯一地址 (Game Network Address , GNA) 。這個地址可以預先設定,也可以動態分配。每個終端都可以通過游戲網絡的若干接入點 ( GNAP ) 通過唯一一條 TCP 連接接入網絡。接入過程需要通過鑒權。

鑒權過程依賴內部的安全機制,可以包括密碼證書,或是特別的接入點區分。(例如,玩家接入網絡就需要特定的接入點,這個接入點接入的終端都一定是玩家)

鑒權通過后,網絡為終端分配一個固定的游戲域名。例如,玩家進入會分配到 player.12345 這樣的域名,數據庫接入可能分配到 database 。

游戲網絡默認提供一個域名查詢服務(這個服務可以通過鑒權的過程注冊到網絡中),讓每個終端都能通過域名查詢到對應的地址。

然后,游戲網絡里所有合法接入的終端都可以通過其地址相互發起連接并通訊了。整個協議建立在 TCP 協議之上,工作于唯一的這個 TCP 連接上。和直接使用 TCP 連接不同。游戲網絡中每個終端之間相互發起連接都是可靠的。不僅玩家可以向某個服務發起連接,反過來也是可以的。玩家之間的直接連接也是可行的(是否允許這樣,取決于具體設計)。

由于每個虛擬連接都是建立在單一的 TCP 連接之上。所以減少了互連網上發起 TCP 連接的各種不可靠性。鑒權過程也是一次性唯一的。并且我們提供域名反查服務,我們的游戲服務可以清楚且安全的知道連接過來的是誰。

系統可以設計為,游戲網絡上每個終端離網,域名服務將廣播這條消息,通知所有人。這種廣播服務在互聯網上難以做到,但無論是廣播還是組播,在這個虛擬游戲網絡中都是可行的。

在這種設計上。在邏輯層面,我們可以讓玩家直接把聊天信息從玩家客互端發送到聊天服務器,而不需要建立多余的 TCP 連接,也不需要對轉發處理聊天消息做多余的處理。聊天服務器可以獨立的存在于游戲網絡。也可以讓廣播服務主動向玩家推送消息,由服務器向玩家發起連接,而不是所有連接請求都是由玩家客互端發起。

虛擬游戲網絡的構成是一個獨立的層次,完全可以撇開具體游戲邏輯來實現,并能夠單獨去按承載量考慮具體設計方案。非常利于剝離出具體游戲項目來開發并優化。

最終,我們或許需要的一套 C 庫,用于游戲網絡內的通訊。api 可以和 socket api 類似。額外多兩條接入與離開游戲網絡即可。

posted on 2017-04-07 10:32 思月行云 閱讀(412) 評論(0)  編輯 收藏 引用 所屬分類: MMO
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久免费精品视频| 亚洲免费观看高清在线观看| 欧美一区在线视频| 亚洲在线一区二区| 国产欧美一区二区三区在线老狼| 欧美一级播放| 久久精品91久久香蕉加勒比| 在线精品一区| 日韩亚洲一区二区| 国产日韩欧美精品在线| 欧美高清视频一二三区| 欧美日韩另类丝袜其他| 欧美一区二区三区视频在线观看 | 亚洲天堂激情| 先锋影音久久久| 91久久夜色精品国产九色| 亚洲精品综合| 狠狠色丁香久久婷婷综合_中| 欧美激情视频一区二区三区免费| 欧美精品在线观看91| 欧美在线视频观看免费网站| 久热精品视频在线观看| 亚洲一区免费网站| 久热re这里精品视频在线6| 亚洲一二三区在线| 久久亚洲精品视频| 新狼窝色av性久久久久久| 美女诱惑一区| 久久久www| 国产精品久久二区二区| 欧美chengren| 国产日韩欧美制服另类| 最新成人av在线| 国产主播喷水一区二区| 一本色道久久综合亚洲精品婷婷| 激情综合色综合久久| 亚洲天堂免费在线观看视频| 亚洲高清精品中出| 欧美在线视频一区二区| 亚洲一区二区三区免费视频| 免费亚洲视频| 免费精品视频| 国产一区二区久久| 亚洲欧美日韩一区二区三区在线| 亚洲老司机av| 男人插女人欧美| 免费在线观看精品| 激情综合色丁香一区二区| 亚洲综合三区| 欧美色另类天堂2015| 一区二区久久久久| 国产精品日韩欧美一区| 亚洲精品影院| 一本色道久久综合亚洲精品不 | 欧美韩日一区二区| 激情五月综合色婷婷一区二区| 亚洲一区二区精品在线| 亚洲一区自拍| 欧美色欧美亚洲另类七区| 亚洲精品免费一二三区| 亚洲伦理自拍| 欧美精品黄色| 亚洲免费成人av| 亚洲天堂激情| 国产精品美女久久久| 这里只有精品在线播放| 亚洲午夜激情在线| 国产精品麻豆va在线播放| 中日韩视频在线观看| 亚洲免费在线视频| 国产片一区二区| 久久精品一区二区| 欧美福利一区| 亚洲久久成人| 国产精品黄色| 久久av资源网| 亚洲国产精品综合| 亚洲视屏在线播放| 国产欧美亚洲精品| 久久久久国产精品www| 欧美国产日韩一区二区| 一本色道久久88精品综合| 国产精品久久波多野结衣| 欧美亚洲日本国产| 亚洲电影中文字幕| 亚洲综合99| 在线观看视频免费一区二区三区| 欧美xart系列高清| 亚洲一区二区三区中文字幕在线| 久久久久国内| 99re视频这里只有精品| 国产女人18毛片水18精品| 久久精品最新地址| 99re在线精品| 狂野欧美性猛交xxxx巴西| 一区二区三区回区在观看免费视频| 国产精品一区免费观看| 免费欧美高清视频| 亚洲欧美日韩国产另类专区| 久热国产精品视频| 亚洲欧美成人一区二区三区| 在线免费不卡视频| 国产精品高潮在线| 欧美成人激情视频| 亚洲欧美中文日韩v在线观看| 亚洲福利电影| 欧美资源在线| 在线亚洲精品| 最新中文字幕一区二区三区| 国产日韩欧美三区| 欧美视频不卡中文| 欧美成人免费在线观看| 欧美中文在线视频| 亚洲图片在线| 亚洲乱码国产乱码精品精天堂| 久久影院午夜片一区| 午夜精品久久久久久久99黑人 | 国产精品福利在线| 欧美国产第二页| 亚洲国产婷婷| 日韩视频在线免费观看| 今天的高清视频免费播放成人| 欧美午夜欧美| 欧美日韩在线一区二区| 欧美成人日韩| 免费亚洲婷婷| 免费久久精品视频| 久久亚洲综合色| 久久久久久久一区二区| 欧美怡红院视频| 先锋影音久久久| 亚洲欧美日韩国产一区二区三区| 一个色综合导航| 一二三区精品福利视频| 99伊人成综合| 一区二区三区免费网站| 亚洲另类视频| 亚洲色诱最新| 亚洲一区激情| 亚洲欧美视频在线观看视频| 亚洲一区二区三区乱码aⅴ| 中文国产亚洲喷潮| 亚洲午夜久久久久久久久电影院| 99国产麻豆精品| 一区二区免费在线观看| 亚洲性夜色噜噜噜7777| 午夜一区在线| 久久激情五月激情| 久久午夜精品| 欧美激情在线| 欧美性理论片在线观看片免费| 国产精品美女xx| 国内一区二区在线视频观看| 一区福利视频| 亚洲精品国产欧美| 亚洲婷婷国产精品电影人久久| 亚洲综合精品| 久久青青草综合| 亚洲国产高清高潮精品美女| 亚洲蜜桃精久久久久久久| 亚洲一区二区精品视频| 欧美在线免费一级片| 久久伊人精品天天| 欧美精品网站| 国产欧美视频一区二区| 亚洲国产免费看| 亚洲一区日韩在线| 久久在精品线影院精品国产| 亚洲国产精品福利| 亚洲午夜电影在线观看| 久久嫩草精品久久久精品一| 欧美日韩国产在线观看| 国产日韩精品久久| 亚洲精品美女在线观看播放| 亚洲欧美视频一区| 欧美成人精品三级在线观看 | 欧美一级艳片视频免费观看| 欧美mv日韩mv国产网站app| 99精品国产高清一区二区 | 中国日韩欧美久久久久久久久| 久久av红桃一区二区小说| 欧美日韩成人| 一区二区在线视频播放| 亚洲亚洲精品三区日韩精品在线视频| 久久精品国产免费观看| 亚洲美女毛片| 可以看av的网站久久看| 国产精品三级久久久久久电影| 亚洲第一中文字幕| 午夜精品久久久久久久久久久久久 | 久久av一区| 亚洲美女黄色片| 久久视频这里只有精品| 国产欧美日韩精品专区| 亚洲精品人人| 欧美色中文字幕| 国内外成人免费激情在线视频网站 | 蜜臀av国产精品久久久久| 国产精品一区二区久激情瑜伽| 亚洲精品免费在线|