游戏服务器需要学习哪些知识
2021-08-06 14:39:54 【

C/C++ 做游戏服务器很多公司都在用,腾讯的《和平精英》的服务器就是C/C++开发的。游戏开发是很早的一个行业,软件诞生起就有游戏开发,游戏开发对性能要求又特别的高,所有游戏开发的前辈们开始开发的时候都使用开发运行效率最高的编程语言,C/C++能直接编译成机器指令,具有最好的运行效率,所以一直以来游戏行业使用C/C++开发也就成为了一个传统。C/C++开发游戏服务器也是成熟的生态,redis, c/c++开发的,mysql server c++开发的,nginx c开发的


这里有个游戏开发学习交流小组点击可以直接加入,一起讨论交流吧


C++游戏服务器的网络通讯技术

游戏服务器和应用服务器不一样,游戏服务器是需要让多个玩家同时在线,而应用服务器是玩家和系统之间的数据交互和通讯,所以应用服务器大多以http 短连接为主,而游戏服务器需要多人同时在线,同时服务器有时候要主动通知客户端,所以游戏中以长连接为主,同时支付等功能又需要http的短连接, 所以游戏服务器网络短连接+长连接模式。 C/C++有很多高性能的网络库,比如libevent, libuv, 也可以直接调用底层的OS API, 比如Windows的IOCP与Linux的epoll, 同时游戏服务器很多地方也需要http server, 我们可以自己基于网络库加一个http 解析库来作为http server,配合nginx来做反向代理,也可以使用成熟的web框架来做。客户端与服务器之间要发送数据结构,要制定协议,我们采用的工具是Porotobuf,来做数据结构的序列化与反序列化。


游戏服务器的数据库的技术

游戏服务器很多数据需要持久化到数据库,同时需要在内存数据库里缓存起来,我们可以使用Mysql,MongoDb。内存数据库我们可以使用Redis, 来做memcache和排行榜等功能。


游戏服务器的日志技术

日志对于游戏服务器开发来说是非常重要的,特别是上线的时候,日志是最重要的一个调试手段,线上版本代码出了bug,也只能通过日志来查,所以一个好的日志系统非常的重要,日志就是输出打印信息到文件,这样一定会有文件IO,我们都知道文件IO会引起线程休眠等待,所以做文件IO的时候,我们的游戏线程都在用异步,在不阻塞游戏线程的情况下,把日志写入到我们的文件里面,或者专门搞一个日志线程来负责写日志。


脚本系统

有时候C/C++服务器为了开发方便,底层框架搭建完成以后还会做一个脚本系统。方便开发业务逻辑,一般的脚本语言会采用Lua来做,比如腾讯的《和平精英》就是C/C++做底层Lua做业务逻辑来开发,同时像skynet这些服务器的库,都是C/C++做底层Lua做业务逻辑,这样做的好处就是能获得很好的性能的同时,开发业务逻辑还非常的方便。为什么游戏公司很多都用Lua做脚本系统呢?这个是有原因的。首先Lua设计就是为轻量级脚本而生的,提供脚本机制,方便嵌入,运行性能好。Lua在游戏界应用这么广泛,得益于《魔兽世界》,魔兽世界最早开始就使用Lua来作为业务逻辑的脚本开发,而且很多客户端引擎也采用Lua编程语言。


游戏开发常用的算法

游戏服务器,很多采用状态同步,其实所有的业务逻辑就是在服务端来跑, 服务端要处理游戏常用的经典问题,碰撞检测,寻路导航, 怪物AI等。所以我们需要基于Java服务器实现常用的算法和工具,比如寻路导航,行为决策树,有限状态机, 物理引擎,碰撞检测等。对于大型的MMORPG而言,还需要做好AOI的状态管理等,这些游戏中常用的核心算法我们要准备好。


最后总结一下C/C++游戏服务器中常用的库


网络库: libuv, libevent


序列化与反序列化: Protobuf, mjson


加密解密库: crypto


http解析库: http parser,


http库 curl


Lua脚本语言 Lua 5.x


Lua与C/C++绑定 toLua


数据库: mysql, redis


高性能网络管理框架: IOCP, epoll



】【打印关闭】 【返回顶部
上一篇端游、手游服务端常用的架构是什.. 下一篇棋牌游戏开发之路,如何规划和走..