Skip to content

自行搭建的MMO游戏服务器框架,客户端支持Unity和UE,单机并发量可达1万。

Notifications You must be signed in to change notification settings

lntoly/myMMOGameServer

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

开发平台: C/C++,在Windows VS2019开发,发布于Linux

项目描述:

从底层搭建的MMO游戏服务器框架,支持C++,U3D,UE客户端。对连接的增删改查管理不会随着连接数的增加而降低性能。单机测试可达1万并发连接。

实现要点:

  1. 采用 Manager 线程、Accept 线程、Recv 线程三个子线程的模型框架,管理新链接的请求,和数据的收发。Manager 线程派发新的连接请求给 Accept 线程和消息请求给 Recv 线程。利用条件变量实现线程同步。

    Manager 线程:在 epoll 上等待,有新的连接请求的时候,唤醒在条件变量上等待的 Accept 线程。有新消息的时候,先把对应连接的文件描述符放进list,唤醒在条件变量上等待的 Recv 线程。

    Accept 线程:在条件变量上等待,被唤醒的时候,调用 Event_Accept 模块接收新链接。

    Recv 线程:在条件变量上等待,被唤醒的时候,从链表上取文件描述符,然后接收消息。

  2. 初始化服务器即开辟底层数据的内存池,结合自定义哈希容器。使对连接的增删改查的复杂度不会随着连接数的增加而增加,维持在O(1)。

    初始化服务器的时候就开辟好一定数量的 S_CONNECT_BASE 的连接数据结构和,S_CONNECT_INDEX 索引数据结构。通过 accept 的 socketFD,可以找到自定义容器中对应的 S_CONNECT_INDEX ,索引数据结构里存放的是 S_CONNECT_BASE 在自定义容器中的位置。

  3. 自定义封包解包协议,实现消息头 = 验证 + 包长 + 指令、消息体的数据结构。

    消息头 = 【2字节的验证头】 + 【4字节的消息长度】+ 【2字节的指令】

    验证头用于安全连接的时候使用。

  4. 建立安全连接机制,通过MD5码和版本号的比对,建立安全连接。

    客户端发来一个MD5码,服务器将 secureCode 和 XorCode 组合生成的MD5码与之比对,再加上版本号的比对。即可形成安全连接。发回给客户端一个结果包。

  5. 实现玩家同步机制,将玩家的变更信息随时同步到其他玩家,离开的玩家数据机构进入对象回收池,减少对象的构造和析构带来的开销。

思维导图

img

目录:

myserver:存放业务层代码

core:存放框架代码

public:存放读取配置文件的入口

About

自行搭建的MMO游戏服务器框架,客户端支持Unity和UE,单机并发量可达1万。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 100.0%