加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

教你从新写游戏处事器框架

发布时间:2019-02-21 01:04:05 所属栏目:业界 来源:腾讯游戏学院
导读:1.需求 因为越通用的代码,就是越没用的代码,以是在计划之初,我就以为应该行使分层的模式来构建整个体系。凭证游戏处事器的一样平常需求分别,最根基的可以分为两层: 底层基本成果:包罗通讯、耐久化等很是通用的部门,存眷的是机能、易用性、扩展性等指标

对付 Protocol 的详细实现子类,我起首实现了一个 LineProtocol ,是一个很是不严谨的,基于文本ASCII编码的,用空格脱离字段,用回车分包的协议。用来测试这个框架是否可行。由于这样可以直接通过 telnet 器材,来测试协议的编解码。然后我凭证 TLV (Type Length Value)的要领计划了一个二进制的协议。或许的界说如下:

协议分包: [动静范例:int:2] [动静长度:int:4] [动静内容:bytes:动静长度]

动静范例取值:

  • 0x00 Error
  • 0x01 Request
  • 0x02 Response
  • 0x03 Notice

Processor

处理赏罚器层是我计划用来对接详细营业逻辑的抽象层,它首要通过输入参数 Request 和 Peer 来得到客户端的输入数据,然后通过 Server 类的 Reply()/Inform() 来返回 Response 和 Notice 动静。现实上 Transport 和 Protocol 的子类们,都属于 net 模块,而各类 Processor 和 Server/Client 这些成果范例,属于其它一个 processor 模块。这样计划的缘故起因,是但愿全部 processor 模块的代码单向的依靠 net 模块的代码,但反过来不创立。

Processor 基类很是简朴,就是一个处理赏罚函数回调函数进口 Process():

  1. ///@brief 处理赏罚器基类,提供营业逻辑回调接口 
  2.  
  3. class Processor { 
  4.  
  5. public: 
  6.     Processor(); 
  7.     virtual ~Processor(); 
  8.   
  9.     /** 
  10.      * 初始化一个处理赏罚器,参数server为营业逻辑提供了根基的手段接口。 
  11.      */ 
  12.     virtual int Init(Server* server, Config* config = NULL); 
  13.  
  14.     /** 
  15.      * 处理赏罚哀求-相应范例包实现此要领,返回值是0暗示乐成,不然会被记录在错误日记中。 
  16.      * 参数peer暗示发来哀求的对端环境。个中 Server 工具的指针,可以用来挪用 Reply(), 
  17.      * Inform() 等要领。假如是监听多个处事器,server 参数则会是差异的工具。 
  18.      */ 
  19.     virtual int Process(const Request& request, const Peer& peer, 
  20.                         Server* server); 
  21.  
  22.     /** 
  23.      * 封锁整理处理赏罚器所占用的资源 
  24.      */ 
  25.     virtual int Close(); 
  26. }; 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读