GameServer介绍

Download Report

Transcript GameServer介绍

游戏服务器介绍
Game Server ABC
Jacky.Chen
APR-08 2013
Agenda 议程
1. 设计准则
2. 系统架构
3. 其它部件
4. Q&A
设计准则
• 由于Erlang在网络处理上的先天优势,系统基于
Erlang OTP
• 系统主要由两种Erlang 服务类型组成:
gen_server, gen_fsm
• 系统其它功能,请直接集成其它开源应用,当前
已经集成的有:
redis client(wooga),
rabbitmq-client,
p1_logger, dynamic_compile
mochijson,mochiglobal,
misultin(Web Server)
OTP gen_server
• 所有调用关系同步/异步: rpc,call/res
•
•
•
gen_server module
Callback module
------------------------------gen_server:start_link -----> Module:init/1
•
•
gen_server:call
gen_server:multi_call -----> Module:handle_call/3
•
•
gen_server:cast
gen_server:abcast
•
-
-----> Module:handle_info/2
•
-
-----> Module:terminate/2
•
-
-----> Module:code_change/3
-----> Module:handle_cast/2
• 为什么不使用gen_server控制game desk???
http://www.erlang.org/doc/man/gen_server.html
http://blog.yufeng.info/archives/tag/gen_server
OTP gen_fsm
•
•
•
•
所有游戏状态都基于状态机
gen_fsm module
Callback module
---------------------------gen_fsm:start_link
-----> Module:init/1
•
gen_fsm:send_event
•
gen_fsm:send_all_state_event
•
gen_fsm:send_event_after
-----> Module:StateName/2
-----> Module:StateName/2
-----> Module:handle_event/3
•
gen_fsm:sync_send_event
-----> Module:StateName/3
•
gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
•
-
-----> Module:handle_info/3
•
-
-----> Module:terminate/3
•
•
•
-----> Module:code_change/4
Gen_fsm的定时器是基于状态机本身,非常的方便创建,管理
应用举例:加入游戏超时设置,出牌超时设置,断线自动托管设置
•
PS: Erlang中有几种timer,比较timer模块,erlang模块中的send_after,由于这些模块的
加载类型会导致大量使用timer过载,不建议在游戏状态中使用
http://www.erlang.org/doc/man/gen_fsm.html
OTP gen_fsm timer
• 游戏状态必须使用状态机中的timer来解决,必须
注意一点:所有的timer触发的状态值必须是唯一,
方便我们调试跟踪,系统更清晰
(比如:游戏结束没有主动开始下一局被踢出及断
线踢出都是踢出动作,触发状态不一致)
• 开发过程中需要详细记录所有的日志,每个消息,
每个调用全部都做到可以溯源
Agenda 议程
1. 设计准则
2. 系统架构
3. 其它部件
4. Q&A
Game Server 预览
基本流程
Tcp controller
gen_fsm
Game/Session
gen_fsm
RPC
Player
Game ack:join,resume,quit …
Subscribe
AsyState Event
Game
message
loop
Player
……….
Player
Asy Game Msg
注意:基本流程—通讯状态
Tcp controller
gen_fsm
Game/Session
gen_fsm
RPC
Player
Game ack:join,resume,quit …
Subscribe
Player
AsyState Event
Game
message
loop
Heart beat
……….
Asy Game Msg
系统必须保持双向心跳检查,如果网络异常,双向都要进行异
常处理,心跳频率依据要比系统设定的最小操作间隔要小
Agenda 议程
1. 设计准则
2. 系统架构
3. 其它部件
4. Q&A
Eredis erlang--redis
• https://github.com/wooga/eredis
• Wooga这家公司建立至今也没有超过5年(2009),
取得了非常不错的成绩,其中有大量的erlang开
源项目;从当前wooga贡献的开源项目来看,大
量基于erlang。可见在社交游戏中受欢迎程度
• https://github.com/wooga
• 引入一个问题:eredis是不提供链接池的,是否
需要实现一个链接池?
AMQP erlang--rabbitmq
• https://github.com/rabbitmq/rabbitmq-erlang-client
• RabbitMQ当前做得非常不错的消息列,基于
erlang实现,当然也提供了非常不错的erlang客
户端
• Rabbitmq有众多的使用者,国内包括taobao
misultin(Web Server)
• https://github.com/ostinelli/misultin
• 非常不错的WebServer,支持websocket,comet
etc
• Mochiweb没有websocket,其它功能相似,整
体性能misultin稍好,可google相关评测
其它
•
•
•
•
•
p1_logger 日志服务
dynamic_compile 动态编译,自动加载
Mochijson 基于mochi json解析器
Mochiglobal 全局变量
record_info Erlang 记录解析,日志输出好帮手
Agenda 议程
1. 设计准则
2. 系统架构
3. 其它部件
4. Q&A
游戏Server引擎基于Erlang OTP
基于Erlang OTP
SIN工作室
传说中,用erlang写的axd 301 可靠性达到了99.9999999%
更多关于Erlang的介绍,请移步:
http://www.slideshare.net/search/slideshow?searchfrom=header&q=erlang
http://www.zeromq.co/?page_id=18