遊戲服務器概述

聲明:本文內容源自騰訊遊戲學院程序公開課。html

1、什麼是遊戲服務器

1,從遊戲玩家之間的交互形態出發

  • 單機遊戲:一我的在機器上玩。
  • 聯網遊戲:同時玩的範圍比較小,好比8-10我的。
  • 網絡遊戲:在遠端有許多機器跑一個很大的系統,能夠有幾千幾萬幾十萬甚至更多的玩家連進來一塊兒玩。

2,遊戲服務是互聯網服務的一種

  • 常見的其餘互聯網服務有:搜索(百度)、電商(阿里)、即時通信(騰訊)、郵件、視頻等

3,遊戲服務的基本職能有哪些?

  • 網絡鏈接和數據收發:TCP收包打包分包。
  • 數據存取
  • 邏輯計算
  • 狀態保持:上下文、內部驅動等等。

4,遊戲服務器:嚴格說是一個硬件概念

  • 常見種類:機架式服務器,刀片機,小型機。
  • 會根據遊戲類型或運行程序的不一樣,在CPU/內存/硬盤上有所側重。

5,遊戲服務器開發

  • 從遊戲交互形態,看遊戲開發分工

遊戲後臺開發==遊戲服務器開發mysql

6,「遊戲服務器」到底指什麼?

  • 承載遊戲服務的硬件
  • 提供遊戲服務的軟件
  • 開發遊戲服務的程序員

 

2、遊戲服務的特色及應對

1,遊戲服務要解決的核心問題

知足海量遊戲用戶的穩定和高質量的服務需求ios

  • 海量 - 十萬~百萬~千萬級同時在線,最高達億級註冊量;
  • 穩定 - 相對於:宕機,網絡和計算卡頓;
  • 高質量 - 快速:網絡延遲;邏輯嚴謹;更新頻率和及時性。

2,遊戲服務與其餘互聯網服務的區別?

延遲敏感程序員

  • 實時交互遊戲通常須要網絡延遲在300ms之內才能保證體驗。

實時的高強度交互算法

  • 單個終端高頻發送請求;
  • 單次請求引起多處數據改變;

業務邏輯複雜,內部耦合度高sql

  • [延遲敏感+高強度交互]同時做用下,[狀態維護]每每成爲必需;
  • 複雜遊戲服務的實現代碼,可達百萬行量級。

變動頻度高,幅度大shell

  • 變動幅度,包含內容和邏輯。

3,先後臺程序的區別

  • 獨佔,意味着什麼?
  1. 擁有全部資源的控制權;
  2. 重視資源的合理使用而不是最少佔用。
  • 大量併發任務,意味着什麼?
  1. 重視性能;
  2. 重視可伸縮性。

性能來自於數據庫

  • 算法選擇與算法優化:排序、查找、空間-時間。
  • 操做系統/應用程序運行機制:IO多路複用;局部性原理;編程語言。
  • 硬件:CPU的充分利用_多線程/多進程;存儲層級的理解和利用;多隊列網卡。

持續運行,意味着:穩定最重要;容錯;日誌和監控。編程

(1)服務穩定包含的因素設計模式

  • 避免程序異常終止;
  • 持續高效的運算與通訊。

(2)如何才能作到穩定?

KISS==Keep It Simple&Stupid (一看就懂)

容錯方面

(1)錯誤不可避免(邏輯自身bug、程序運行環境、外部影響)

(2)基本要求 - 錯誤範圍可控

  • 一個用戶的錯誤不要傳染到其餘用戶;
  • 非核心功能的失效不要致使整個系統服務的失效。

(3)基本應對 - 錯誤隔離和可快速恢復。

4,遊戲後臺開發的方法論

(1)本質上是應對海量服務的問題。

(2)出發點:兩種不一樣的困難

  • 事情自己邏輯很簡單,可是併發規模很是大;
  • 事情自己的邏輯複雜,要經歷複雜的處理步驟。

(3)方法論 - 分治

大的問題分解成小問題,小問題繼續分解,最終在合適的力度下獲得解決。

服務分佈化

  • 三層架構:接入-邏輯-存儲;
  • 通用服務:微服務。

內部複雜度應對:分層分塊。

(4)方法論 - 灰度

什麼是灰度:拋棄0/1思惟;在不一樣的場景下提供不能的服務。

在不一樣範疇維度的應用:服務降級;灰度分佈。

感悟:任何事情都不是非黑即白的,能夠灰度發佈,灰度服務(取中間值)。

5,遊戲服務器的相關參與者

開發者:服務器程序員。

開發夥伴:客戶端程序員,遊戲策劃。

構建-測試:測試工程師。

部署維護:運維工程師。

 

3、遊戲服務器開發技術介紹

1,算法

(1)瞭解常見查找/排序算法的特色:利用算法來改善性能,勝於經過編譯器選項、編程技巧;

(2)根據業務狀況合理的選擇算法

2,系統層面

(1)對操做系統基礎知識的瞭解

  • 處理器管理
  • 進程管理
  • 線程調度
  • 內存管理
  • IO管理
  • 權限管理 ...etc

(2)對Linux操做系統的瞭解

  • 內核
  • 用戶管理
  • 文件系統
  • 進程、線程
  • 進程間通訊
  • 網絡
  • 信號處理
  • 權限等

3,開發工具

  • 對編譯器gcc的瞭解
  • 對調試器gdb的瞭解
  • 對文檔工具ar的瞭解
  • 對autotools的瞭解
  • 對Makefile的瞭解
  • 對性能分析工具的瞭解
  • 對內存泄露調試工具的瞭解
  • 對samba文件共享的瞭解
  • 對版本管理工具(cvs/svn/cc)的瞭解

4,語言

(1)選擇編程語言的幾個因素

  • 業務複雜度
  • 執行效率VS開發效率
  • 開發人員和團隊能力

(2)C/C++技能要求

  • 對C/C++的語法很是瞭解
  • 對Ansi C庫函數很是瞭解
  • 對指針有正確並且牢固的認識
  • 對STL庫很是瞭解
  • 對C/C++語言的內存分配機制很是瞭解
  • 對第三方框架的瞭解(如ACE/ICE等)

5,腳本語言

(1)Shell腳本

  • Linux下的程序開發,學會使用shell腳本會大大的提升工做效率;
  • 一些工做適合用shell來完成,開發效率更快;
  • shell腳本經常被用來作一些集成的工做。

(2)程序內嵌腳本語言

  • 瞭解腳本(解釋性語言)的優缺點;
  • 腳本在遊戲開發中的適用範圍;
  • Lua/Python/自定義腳本。

6,軟件設計技巧

(1)化繁爲簡的重要途徑:區分「變化性」是其中的關鍵。

(2)設計原則 - SOLID

  • 單一責任原則
  • 開發-封閉原則
  • 里氏替換原則
  • 依賴倒置原則
  • 接口分離原則

(3)設計模式:能夠視爲設計原則的應用。

想清楚:用到這些方法、方式,它的緣由是什麼?

7,Linux下的經常使用工具

  • 系統管理工具:ipcs/ps/top/...
  • 文件系統工具:ls/find/where/which/locate...
  • 文件處理工具:sed/grep/...
  • 性能檢測工具:iostat/memstat...
  • SSH工具:ssh/ssh2/sshd/ssh2d/scp/...

8,專項技術

(1)關係數據庫

  • 對數據庫原理的瞭解
  • 常見DBMS:mysql:瞭解mysql的安裝和簡單管理;性能調優的房;賦值;備份和恢復。
  • 對SQL語言的瞭解及使用
  • 對數據庫表結構設計的瞭解

(2)NoSQL

  • KV型的數據存儲方式
  • CAP & BASE
  • Redis/MongoDB

(3)文件

(4)網絡接入,協議

  • 瞭解TCP/UDP協議
  • 瞭解HTTP協議
  • 底層網絡編程接口:BSD SOCKET
  • 網絡多路處理機制:signal/select/poll/epoll/...
  • C10K ~ C1000K
  • Google Protobuf

 

4、參考資料

服務器_維基百科

遊戲服務器與普通服務器有什麼區別_知乎

Lua 爲何在遊戲編程領域被普遍運用?_知乎

 

5、總結

在拿到offer的那一刻,我不知道遊戲服務器端是作什麼的。在部門大佬的指導和介紹下,我打開了本課程開始學習。課程總共有16節,我爭取學習完一節課程後就整理,總結,吸取好這節課的內容,而後發佈到博客上,但願我能堅持到底!

若是有寫的很差或須要補充的地方請及時提出來,我看到後會及時更新的。^_^

相關文章
相關標籤/搜索