买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:东北大学
摘要:本发明提供一种高并发游戏服务器架构,涉及计算机系统及网络通信技术领域。部署在Linux操作系统上,包括服务端、客户端。客户端是基于NCurses绘制的命令行应用程序;服务端包括IO多路复用模块、协议解析模块、命令行参数解析模块、日志记录模块和游戏逻辑模块。IO多路复用模块基于Linux系统提供的Epoll机制处理TCP网络请求;协议解析模块使用基于TCP协议设计的应用层协议作为通信协议,使用事件总线分发网络事件;命令行参数解析模块用于处理运行时通过命令行传递的参数,能动态指定端口和日志等级参数。本发明能承受较高吞吐量,在高并发场景发挥良好;仅使用单个线程,能充分利用操作系统资源,避免上下文切换带来的性能开销。
主权项:1.一种高并发游戏服务器架构,其特征在于:部署在Linux操作系统上,包括服务端、客户端两部分,其中客户端是一个基于NCurses绘制的命令行应用程序;服务端包括IO多路复用模块、协议解析模块、命令行参数解析模块、日志记录模块和游戏逻辑模块;所述IO多路复用模块基于Linux系统提供的Epoll机制处理TCP网络请求;所述协议解析模块使用基于TCP协议设计的应用层协议作为通信协议,协议内容为服务端和客户端间通过“消息”传递事件数据,“消息”由4字节的事件长度、4字节的事件类型和不定长的事件体组成;使用事件总线分发网络事件;所述命令行参数解析模块用于处理运行时通过命令行传递的参数,能动态指定端口和日志等级参数;所述日志记录模块用于记录不同等级的日志信息,将日志信息输出到标准输出内并写入文件持久化存储;所述游戏逻辑模块用于根据IO多路复用模块触发的事件实现对应具体游戏逻辑的处理;所述IO多路复用模块的实现步骤包括:步骤1:初始化Epoll实例及服务器套接字;步骤1.1:声明函数指针变量client_connected_callback、client_data_callback和client_disconnected_callback,分别用于对外暴露客户端连接事件回调函数、数据到达回调函数和客户端连接断开回调函数,将网络请求处理逻辑与应用层协议处理逻辑解耦;步骤1.2:创建Epoll实例;步骤1.3:初始化服务端套接字实例;步骤1.4:将服务器套接字对应的文件描述符加入先前创建好的Epoll实例中,并监听EPOLLIN事件;步骤2:循环接受客户端套接字传入的连接;步骤2.1:使用epoll_wait操作接受Epoll实例中发生的事件列表;步骤2.2:依次处理所有发生的事件;若发生事件的文件描述符不为服务端套接字,则执行步骤2.4,否则执行步骤2.3;步骤2.3:添加新客户端;具体包括:步骤2.3.1:接受传入的客户端连接;步骤2.3.2:将客户端连接对应的文件描述符加入Epoll实例中,并监听EPOLLIN事件;步骤2.3.3:调用客户端连接事件回调函数,通知上层模块对该事件进行处理;步骤2.4:处理传入数据;具体包括:步骤2.4.1:将指定客户端的输入数据读入缓存中;若读入数据为空,则执行步骤3;步骤2.4.2:调用数据到达回调函数,通知游戏逻辑模块对该事件进行处理;步骤3:关闭套接字连接并释放相关资源;步骤3.1:关闭对应文件描述符的套接字连接;步骤3.2:取消Epoll实例中对该文件描述符的监听;步骤3.3:调用客户端连接断开回调函数,通知游戏逻辑模块对该事件进行处理;所述协议解析模块的实现步骤包括:步骤P1:声明事件链表节点结构体,其中包括一个参数为事件和套接字文件描述符的回调函数,以及下一个事件节点的指针;步骤P2:创建事件总线实例,具体包括:步骤P2.1:创建一个长度为事件类型数的事件监听器列表;步骤P2.2:将每个监听器列表的头指针的next值设置为空;步骤P3:创建注册事件监听器函数,具体包括:步骤P3.1:分配下一个事件监听器节点的内存;步骤P3.2:将传入的监听器回调函数存入对应节点内;步骤P4:创建注销事件监听器函数,具体包括:步骤P4.1:依次遍历目标事件类型中所有的监听器节点;步骤P4.2:若找到目标监听器函数,则删除该节点,并释放内存;步骤P5:创建触发事件函数,具体包括:步骤P5.1:若事件类型ID不合法,则忽略该事件,否则跳转步骤P5.2;步骤P5.2:依次遍历监听器列表,并将事件实例通过监听器中回调函数传递给对应的处理逻辑;步骤P6:声明客户端信息表,内部存储客户端连接信息,包括文件描述符、玩家信息、房间地址和接收缓冲区,使用文件描述符进行索引;步骤P7:处理客户端连接,具体包括:步骤P7.1:记录客户端连接信息日志;步骤P7.2:在客户端信息表中初始化对应位置的客户端信息;步骤P8:处理客户端输入数据;具体包括:步骤P8.1:在客户端信息表中使用文件描述符获取对应的客户端信息引用;步骤P8.2:若接收缓冲区内已读入的字节数小于4,则执行步骤P8.3,否则执行P8.4;步骤P8.3:读入1字节到缓冲区内,若缓冲区内已读入4字节,则执行P8.5;步骤P8.4;减少1字节的待处理数据长度,执行P8.1;步骤P8.5:将缓冲区中4字节作为uint32_t类型读取,转换为主机字节序后更新缓冲区待读字节数;步骤P8.6:若缓冲区内已读入字节数小于待读字节数,则将接收数据全部复制到缓冲区内,执行P8.1,否则执行步骤P8.7;步骤P8.7:将接收缓冲区作为事件指针,将事件类型转换为主机字节序后,交由事件总线分发;步骤P8.8:清空缓冲区,若仍有待处理数据,则执行P8.1。
全文数据:
权利要求:
百度查询: 东北大学 一种高并发游戏服务器架构
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。