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

教你从头写游戏服务器框架

发布时间:2019-02-22 05:34:14 所属栏目:业界 来源:腾讯游戏学院
导读:副标题#e# 1.需求 由于越通用的代码,就是越没用的代码,所以在设计之初,我就认为应该使用分层的模式来构建整个系统。按照游戏服务器的一般需求划分,最基本的可以分为两层: 底层基础功能:包括通信、持久化等非常通用的部分,关注的是性能、易用性、扩展

在上面的定义中,可以看到需要有一个 Peer 类型。这个类型是为了代表通信的客户端(对端)对象。在一般的 Linux 系统中,一般我们用 fd (File Description)来代表。但是因为在框架中,我们还需要为每个客户端建立接收数据的缓存区,以及记录通信地址等功能,所以在 fd 的基础上封装了一个这样的类型。这样也有利于把 UDP 通信以不同客户端的模型,进行封装。

  1. ///@brief 此类型负责存放连接过来的客户端信息和数据缓冲区 
  2. class Peer { 
  3. public: 
  4.     int buf_size_;      ///< 缓冲区长度 
  5.     char* const buffer_;///< 缓冲区起始地址 
  6.     int produced_pos_;  ///< 填入了数据的长度 
  7.     int consumed_pos_;  ///< 消耗了数据的长度 
  8.  
  9.     int GetFd() const; 
  10.     void SetFd(int fd);    /// 获得本地地址 
  11.     const struct sockaddr_in& GetLocalAddr() const; 
  12.     void SetLocalAddr(const struct sockaddr_in& localAddr);    /// 获得远程地址 
  13.  
  14.     const struct sockaddr_in& GetRemoteAddr() const; 
  15.     void SetRemoteAddr(const struct sockaddr_in& remoteAddr); 
  16.  
  17. private: 
  18.     int fd_;                            ///< 收发数据用的fd 
  19.     struct sockaddr_in remote_addr_;    ///< 对端地址 
  20.     struct sockaddr_in local_addr_;     ///< 本端地址 
  21. }; 

(编辑:网站开发网_马鞍山站长网)

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