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

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

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

有了 Server 范例,必定也必要有 Client 范例。而 Client 范例的计划和 Server 相同,但就不是行使 Transport 接口作为传输层,而是 Connector 接口。不外 Protocol 的抽象层是完全重用的。Client 并不必要 Processor 这种情势的回调,而是直接传入接管数据动静就提倡回调的接口工具 ClientCallback。

  1. class ClientCallback { 
  2.  
  3. public: 
  4.    
  5.     ClientCallback() { 
  6.     } 
  7.     virtual ~ClientCallback() { 
  8.          // Do nothing 
  9.     } 
  10.  
  11.     /** 
  12.      *  当毗连成立乐成时回调此要领。 
  13.      * @return 返回 -1 暗示不接管这个毗连,必要封锁掉此毗连。 
  14.      */ 
  15.     virtual int OnConnected() { 
  16.         return 0; 
  17.     } 
  18.  
  19.     /** 
  20.      * 当收集毗连被封锁的时辰,挪用此要领 
  21.      */ 
  22.     virtual void OnDisconnected() {        // Do nothing 
  23.     } 
  24.  
  25.     /** 
  26.      * 收到相应,可能哀求超时,此要了解被挪用。 
  27.      * @param response 从处事器发来的回应 
  28.      * @return 假如返回非0值,处事器会打印一行错误日记。 
  29.      */ 
  30.     virtual int Callback(const Response& response) { 
  31.         return 0; 
  32.     } 
  33.  
  34.     /** 
  35.      * 当哀求产生错误,好比超时的时辰,返回这个错误 
  36.      * @param err_code 错误码 
  37.      */ 
  38.     virtual void OnError(int err_code){ 
  39.         WARN_LOG("The request is timeout, err_code: %d", err_code); 
  40.     } 
  41.  
  42.     /** 
  43.      * 收到关照动静时,此要了解被挪用 
  44.      */ 
  45.     virtual int Callback(const Notice& notice) { 
  46.         return 0; 
  47.     } 
  48.  
  49.     /** 
  50.      * 返回此工具是否应该被删除。此要了解被在 Callback() 挪用前挪用。 
  51.      * @return 假如返回 true,则会挪用 delete 此工具的指针。 
  52.      */ 
  53.     virtual bool ShouldBeRemoved() { 
  54.         return false; 
  55.     } 
  56. }; 
  57.  
  58. class Client : public Updateable { 
  59.   
  60. public: 
  61.     Client();    virtual ~Client(); 
  62.  
  63.      /** 
  64.      * 毗连处事器 
  65.      * @param connector 传输协议,如 TCP, UDP ... 
  66.      * @param protocol 分包协议,如 TLV, Line, TDR ... 
  67.      * @param notice_callback 收到关照后触发的回调工具,假如传输协议有“毗连观念”(如TCP/TCONND),成立、封锁毗连时也会挪用。 
  68.      * @param config 设置文件工具,将读取以下设置项目:MAX_TRANSACTIONS_OF_CLIENT 客户端最大并发毗连数; BUFFER_LENGTH_OF_CLIENT客户端收包缓存;CLIENT_RESPONSE_TIMEOUT 客户端相应守候超时时刻。 
  69.      * @return 返回 0 暗示乐成,其他暗示失败 
  70.      */ 
  71.     int Init(Connector* connector, Protocol* protocol, 
  72.              ClientCallback* notice_callback = NULL, Config* config = NULL); 
  73.  
  74.     /** 
  75.      * callback 参数可觉得 NULL,暗示不必要回应,只是纯真的发包即可。 
  76.      */ 
  77.     virtual int SendRequest(Request* request, ClientCallback* callback = NULL); 
  78.  
  79.     /** 
  80.      * 返回值暗示有几多数据必要处理赏罚,返回-1为堕落,必要封锁毗连。返回0暗示没稀有据必要处理赏罚。 
  81.      */ 
  82.     virtual int Update(); 
  83.     virtual void OnExit(); 
  84.     void Close(); 
  85.     Connector* connector() ; 
  86.     ClientCallback* notice_callback() ; 
  87.     Protocol* protocol() ; 
  88. }; 

至此,客户端和处事器端根基计划完成,可以直接通过编写测试代码,来搜查是否运行正常。

关于作者:韩伟,腾讯互娱高级工程师,今朝在Next产物中心研发创新范例游戏。

(编辑:湖南网)

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

热点阅读