---恢復內容開始---html
1.認識遊戲vue
1.1什麼是遊戲git
1.1.1遊戲的定義 github
任何人類正常生理需求以外的活動都可稱爲遊戲shell
1.1.2遊戲的分類數據庫
RPG角色扮演遊戲、ACT動做遊戲、AVG冒險遊戲、FPS第一人稱視角射擊遊戲、TPS第三人稱視角射擊遊戲、FTG格鬥遊戲、SPT體育遊戲、RAC競速遊戲、RTS即時戰略遊戲、STG射擊類遊戲、SLG策略遊戲、MSC音樂遊戲、SIM生活模擬遊戲、TCG育成遊戲、CAG卡片遊戲、LVG戀愛遊戲、GAL美少女遊戲、WAG手機遊戲、MMOPRG大型多人在線角色扮演遊戲、ARPG動做角色扮演遊戲、ETC其餘類遊戲、動漫遊戲、MOBA多人在線技術競技遊戲apache
1.2遊戲開發及分工編程
可行性與計劃研究階段、分析需求階段、設計階段、開發階段、測試階段、系統驗收json
開發流程:產品立項、遊戲設計、開發階段、測試階段、Alpha測試(項目組內部測試)、Beta測試(遊戲內測)、上線推廣階段、運營階段設計模式
1.3遊戲行業現狀分析
虛擬現實設備及內容、移動遊戲操控設備、互聯網+遊戲創業、電競直播平臺、原創IP、H5遊戲
1.4遊戲服務器開發要點
網絡知識(OSI參考模型、套接字、長鏈接、短鏈接)、併發編程、設計模式(單例模式、工廠模式、觀察者模式)、數據庫(MySQL、Mongo,內存數據庫Redis、Memcache、Ehcache)、gm運營工具、運維知識(服務器部署、架構搭建、負載均衡、日誌管理、數據庫備份恢復、災難處理)
2.環境搭建
2.1Windows開發環境搭建
2.1.1安裝JDK
設置Path變量、設置CLASSPATH環境變量、設置JAVA_HOME
2.1.2安裝Eclipse
2.1.3安裝數據庫客戶端工具
Navicat for MySQL (MySQL) : http: //www.navicat.eom.cn/
MongoVUE (Mongo ) : http:/ www.mongovue.com
RedisClient (Redis) : https: // github.com/caoxin /RedisClient
2.1.4安裝SSH工具
XShell: http: //www.netsarang.com/products/xsh_overview.html
SSH: http://ultra.pr.erau.edu/~·jaffem/tutoriaVSSH _secure_ shell_ client.htm
2.1.5 安裝其餘工具
文本編輯器
Ediψlus: https: //www.ediφlus.com/download.htrnl
Sublime Text: http: //www.sublimetext.com/
容器
Tomcat: https: //tomcat.apache.org/
JBoss: http://jbossas.jboss.o
JSON 解析工具
在線 JSON 解析: http://json.cn
2.2Mac OS X開發環境搭建
2.3Linux服務器環境搭建
3.網絡通訊
3.1通訊協議
TCP/IP模型:鏈路層、網絡層、傳輸層、應用層
3.1.1面向鏈接的 TCP
3次握手創建鏈接
面向鏈接:通訊以前必須經過三次「握手」創建可靠鏈接
安全可靠:每 次通訊都必須獲得對方的應答,不然認爲數據報丟失,須要重發。
全雙工通訊: 旦創建鏈接,雙方均可以經過通道進行數據傳輸
通訊只能創建在兩個點之間
面向流通訊:通訊傳輸是經過流的形式進行的。
3.1.2面向數據報的UDP
3.1.3HTTP編程
3.1.4Socket編程
服務器監聽、客戶端請求、鏈接確認
3.1.5 WebSocket 編程
3.2Java NIO 基礎
3.2.1BIO編程(阻塞式IO)
3.2.2NIO編程(非阻塞式IO)
建立1個線程負責處理 IO 事件和 事件的分發。
事件驅動機制非同步監視事件,而是事件到達以後觸發。
線程之間經過 wait notify 等方式通訊,減小了沒必要要的線程切換。
3.2.3AIO編程(異步IO)
沒有阻塞等待客戶端鏈接
3.3Mina的介紹及其使用
3.3.1整體架構
3.3.2IoService
負責IO相關工做
3.3.3IoFilterChain
擴展處理器
3.3.4IoHandler
業務邏輯處理
3.3.5IoSession
對應客戶端與服務端的IO鏈接
3.3.6工做原理
3.3.7Acceptor與Connector 線程
監聽鏈接
3.3.8 Processor 線程
複製IO讀寫操做
3.3.9線程模式
3.3.10請求的處理順序
保證請求IO請求順序
3.3.11Mina編程
3.4Netty的介紹及其使用
3.4.1整體架構
3.4.2零拷貝
Netty 的接收和發送來用 ByteBuffer, ByteBuffer 採用 Direct Buffers ,即ByteBuffer 直接使用堆外的內存進行 Socket 讀寫,而不須要進行字節緩衝區的二次拷貝
Netty 的組合 Buffer 對象,能聚合多個 ByteBuffer 對象,用戶若是要操做多個Buffer ,能夠先將這些 Buffer 組合,而後操做這個組合 Buffer
Netty 採用 transferTo 進行文件傳輸,能夠直接把文件緩衝區的數據發送到目標的Channel
3.4.3 Codec 框架
FrameDecoder
FrameDecoder 經過維護 DynamicChannelBuffer 存儲接收的數據,它提供抽象模板,在模板中寫好了整個解碼過程,使用它只需在子類實現 decode 方法。
ReplayingDecoder
ReplayingDecoder FrameDecoder 的非阻塞解碼
ObjectEncoder和Objectoecoder
這兩個類能對 Java 對象進行編解碼序列化。
HttpRequestEncoder 和HttpRequestDecoder
Netty中還能實現 HTTP 服務器,經過 HttpRequestEncoder HtφRequestDecoder能實現 HTTP 請求和響應的編解碼。
3.4.4 Channel
3.4.5 ChannelEvent
3.4.6 ChannelPipeline
3.4.7 Netty 編程
4.數據交互
4.1數據傳輸格式
網絡數據大小、網絡數據安全性、實現複雜度、協議通用性
數據類型:自定義二進制 Binary、開源協議、文博會協議
4.2JSON的使用及解析
4.3XML的使用及解析
4.4Google Protocol Buffer 的介紹及使用
4.4.1 Protobuffer 的安裝與編譯
4.4.2 Protobuffer 的語法
標識符,Proto buffer 協議的標識符爲 message enum, message 表明消息類型, enum 表明枚舉類型,在經過 Protobuffer 的編譯器編譯以後,它們都生成 Java 中的一個類。
修飾符
required :該宇段不能爲空,必須傳遞值,不然 message 不能被正確初始化。
optional :該字段能夠爲空,無論該字段是否傳值, message 都能正確初始化。
repeated :重複的字段,等同動態數組,編譯成 Java 後即爲 List ,可是其數據能夠爲空。
數據類型
Package
Option,Option 能夠定義 些經常使用選工頁
4.4.3 生成 Java類
4.4.4 Eclipse的protobuf-dt 插件
4.4.5 示例程序
5.數據緩存與持久化
5.1遊戲數據存儲
5.1.1 數據分類
全局數據(排行榜信息、聯盟信息、國家信息、競技場信息等全服全部玩家共享的信息)、在線玩家數據、離線玩家數據
5.1.2 數據緩存方式
5.1.3 數據持久化方式
5.1.4 數據庫的比較
5.2MySql的介紹及使用
5.3MongoDB的介紹及使用
文檔存儲、可擴展性、易查詢、安全性
5.4Memcache的介紹和使用
5.5Redis的介紹和使用
5.5.1Redis的特色
速度快、數據類型豐富、操做原子性、持久化、應用場景豐富
5.5.3Redis的持久化
AOF 模式指 Redis 在執行過程當中會把全部的寫指令記錄下來,當數據恢復時,再按照當時記錄的順序執行 遍命令
RDB 模式是在不一樣的時間 點將 Red is 存儲的數據快照存儲到磁盤等介質上, Redis在持久化過程當中,會先將數據寫到臨時文件中,持久化過程結束以後再用臨時文件替換上次持久化好的文件
5.5.4Redis的主從複製
6.遊戲邏輯
6.1邏輯架構
6.1.1項目目錄
6.1.2模塊介紹
core :核心模塊
Gamelnit :遊戲服務器啓動關閉類,負責服務器資源的加載與釋放
Router :處理玩家請求接入的邏輯處理消息分發
manager:邏輯模塊
event 事件處理模塊。
module :邏輯模塊。
net :網絡模塊,使用的網絡框架及網絡請求處理等
rpc:負責邏輯服務器與其餘服務器的遠程服務調用。
NetFramework :模擬網絡層框架,負責網絡請求響應的封裝(這裏只寫了一個模擬類,正式開發中應當使用 Netty Mina 等網絡框架〉
NetHandler :模擬網絡框架處理接口,負責處理網絡框架的邏輯。
NetHandlerlmpl :模擬網絡框架處理接口的實現類
NetModule :模擬網絡層框架封裝,負責封裝網絡框架。
ProtoIds :網絡請求協議號,客戶端與服務器交互的協議號
ProtoMessage :網絡請求消息體,客戶端與服務器交互的消息結構
ResultCode :網絡響應碼,客戶端與服務器交互返回結構的響應碼封裝
net.properties :網絡配置 IP 端口文件
task :任務模塊,遊戲中須要的定時任務。
JobMgr: Job 管理類
QuartzManager: Quartz 管理類
TestJob :測試 Job類
template :靜態數據,遊戲中靜態數據的載入和讀取。
DataLoader :遊戲服務器數據載入類。
util :工具類,所須要的工具類,如數據庫工具類、緩存工具類、線程池工具
CacheUtil 緩存管理類
DB 數據庫管理類
ExecutorPool 線程池管理類
test:遊戲服務器邏輯框架測試類
6.2邏輯流程
6.2.1網絡模塊
6.2.2線程池
6.2.3啓動服務器
6.2.4邏輯請求處理
6.2.5關閉服務器
6.3事件處理器
在遊戲服務器中,常常會有事件觸發機制,觸發的事件一般是經過異步方式執行。服務器內部事件處理器,用於斷開模塊之間藕合。好比登陸後要給好友發上線通知 登陸完成後觸發一個登陸事件,全部關注這個事件的模塊,仍然處理本身的業務 避免 登陸完成後直接調用其餘模塊的接口。
6.4定時任務
在遊戲服務器中,常常會有定時執行某個邏輯的需求,如每日簽到、整點更新、玩 家某個屬性在某個時刻進行刷新、聯盟或國家的聲望值在每週的某個時刻刷新,這一系 列的需求都須要使用定時任務來實現
6.5RPC框架
各個服務器進程之間的通訊部分,在多個服務器進程之間的通訊,目前使用的技術 般是 RPC
6.5.1 Json-rpc
6.5.2 Motan
發現服務、訂閱服務和服務通知
支持 Fail Over FailFast ,以及 Server 連續失敗的次數達到規定次數進行心跳檢 測等高可用策略
支持優先低併發、 致性 Hash 、隨機請求、輪詢 負載均衡策略
支持 SPI 擴展
可調用統計日誌和訪問日誌
7.遊戲安全
7.1遊戲安全的必要性
7.2登陸安全
7.3遊戲充值
客戶端向開發商服務器請求生成訂單。
客戶端調用聯運 SDK 打開支付界面,玩家輸入支付信息。
聯運 SDK 將訂單信息發送給聯運服務器。
聯運服務器記錄訂單併發送訂單給開發商服務器進行支付驗證。
開發商服務器校驗訂單信息,校驗成功就對客戶端發貨,並返回校驗結果給 聯運服務器。
聯運服務器返回訂單結果給客戶端。
7.4SQL 注入
7.5通訊協議與消息格式
7.6整型溢出
7.7併發請求
7.8邏輯漏洞
7.9日誌系統
8.服務器架構分析
8.1服務器架構的演變過程
8.2全區同服架構分析
8.2.1 coc 架構模型分析
8.2.2 COK 架構模型分析
8.3分區分服架構分析
8.4弱聯網類遊戲架構分析
8.5MMORPG 類遊戲架構分析
9.《皇室戰爭》遊戲開發實戰
9.1微競技遊戲介紹
9.2架構分析及搭建
9.2.1 功能分析
9.2.2 服務器部署架構
9.2.3 系統架構
.通訊機制、數據處理、項目管理、系統技術架構圖
9.3數據持久化方案
9.3.1 數據結構分析
9.3.2 使用 Morphia 操做 MongoDB
9.4Netty 網絡框架的使用
9.4.1 Netty 實現的 HTTP 服務器
9.4.2 Netty 實現的 TCP 服務器
9.5帳號系統
9.6我的信息
9.7英雄卡牌系統
9.8寶箱系統
9.9戰鬥系統
9.10客戶端模擬
10.遊戲開發技術前景
10.1Egret
10.2Cocos 20
10.3Unity
10.4Unreal
10.5Java
10.6Node.js