如何搭建游戏服务器?

广告也精彩

我从事游戏服务器开发已经快两年了。在过去的两年里,我参与了许多项目,学习了许多游戏服务器开发技术,参与了几种不同架构的服务器开发。我只是谈谈游戏服务器开发所需的技术(以下游戏服务器更倾向于手机游戏,因为我与终端游戏和页面游戏开发接触不多)1.谈谈服务器开发应该考虑什么。选择开发语言:工欲善其事,必先利其器,选择合适的开发语法对后期开发有事半功倍的作用。该行业主要采用c/c++Python/lua模式制作游戏服务器。c/c+做网络通信数据传输,python/lua做业务逻辑。这样既保持了网络传输的效率(c++),又提高了开发效率(Python/lua),还支持热更新。当然还有其他服务器开发语言,erlang(没用过,页面游戏公司用的比较多),c#(大棒子国喜欢用,神奇民族),Java(第一次听说的时候惊呆了),node.js(少量游戏,还有一个node.js写的引擎叫pemolo),php(php+mysql也是http协议通信游戏的好选择)。1.firefly(9秒社区开发的python游戏服务器框架)https://github.com/9miao/firefly。2.kbengine(作者说他是按照bigworld的架构设计的,c++python)https://github.com/kbengine/kbengine。2.数据库。两种流行的数据库,关系型数据库mysql和非关系型数据库mongodb。这是我最常用的两个数据库。互联网上有很多关于两者之间的比较。当然,你也可以使用其他数据库。至于sqlserver,如果你不怕被坑,你可以使用它(我一直不喜欢微软的东西)。3.服务结构。说说我用过的架构模型之一,也是公司按照bigworld架构设计的:1.Gate:首先要有一个Gate(网关)服务器,负责客户端连接和消息转发到Game(游戏服),保持客户端到服务端的连接,没有逻辑,只做消息加密解密,转发客户端和服务器消息(相当于两者之间的桥梁)。2.GameServer:GameServer是一个游戏过程,提供游戏逻辑功能(采用单过程(或单线程)模型。游戏服务器的瓶颈从来不在CPU,所以如果只做逻辑功能,单线程就够了,这里不需要多线程或者多过程)。3.DBManager:实现数据库的读写,方便Game服务器异步读写数据库的数据(有数据库读写放在游戏服里,没有单独的服务器,恐怕游戏服单过程不够)。4.GameManager:负责管理GameServer和GameServer之间的所有消息转发,并为所有Game提供广播功能。4.协议客户端和服务器之间的协议通信可以使用tcp或http。主要看游戏模型。如果是弱联网单机游戏,用http就够了,比如每天酷跑,需要的时候只处理一个http请求响应。但是tcp还是比较常用的。现在的网络游戏大多是tcp,比如MMORPG。我们现在的游戏同时使用http和tcp,客户端和游戏服使用http协议。tcp长链接只用于多人战斗转向战斗服。udp:其实游戏是有udp的。在pvp即时战斗等一些高效场景中,tcp的拥塞控制和超时重传是不合适的。有的用udp,然后自己丢包重发,把网络公平换成局部效率。现在参与开发的游戏同时使用http协议和tcp协议。在游戏服中,http协议用于单机游戏。战斗服需要长连接才能保存协议状态。5.存盘有数据库就必须有数据库读写操作,最重要的是存盘(save),周期存盘还是即时存盘。即时存储是将每个操作数据存储在数据库中,当然,这将导致数据库操作过于频繁,毕竟,这是效率的瓶颈之一。周期存储也称为固定存储,即每隔一次固定时间存储一次,如10秒或15秒,因此数据库的压力将要小得多。当然,我们应该在内存中做好数据操作,以防止数据污染或存储不能导致返回。二、开发游戏服务器需要掌握的开源技术。1.libevent、boost.asio等网络库,网上有很多开源网络库,与其自己造轮子,不如用开源网络库作为自己服务器的通信库。最著名的是libevent和boost.asio。Boost的ASIO是一个异步IO库,包装了Socket的常用操作,简化了基于Socket程序的开发。支持跨平台。libevent是由C语言写作事件驱动的开源网络库。详见http:/blog.csdn.net/majianfei1023/article/details/46485705。至于两者之间的效率,不同的人有不同的看法。当然还有很多:比如云风写的skynet(c+lua),陈硕写的muduo(c++)。他们都写得很好。云风写的东西简单易用。陈硕正在展示他的c++技术。2.protobuf:全称GoogleProcolbufers,是google开发的一套用于数据存储和网络通信协议编解码的工具库。类似于XML或JSON,即以某种格式(XML、JSON)保存某些数据结构的信息,protobuf不同于XML和JSON,protobuf是基于二进制的。主要用于数据存储、传输协议格式等场合。详见:http://blog.csdn.net/majianfei1023/article/details/45112415。protobuf的优点是传输大数据产生的数据非常紧凑和小,可以显著降低传输量。而且处理速度比较快,实现了C++、Java、PHP等各种编程语言。缺点是不能明文编辑(数据是二进制的)。用protobufrpc传输数据非常方便,所以是个不错的选择。googleprotobuf只负责消息的包装和解包,不包括RPC的实现,需要自己实现。3.zeromq:消息队列,一个稳定简单的多过程通信方案的基础。ZeroMQ不是socket的封装,不能用来实现现有的网络协议。它有自己的模式,不同于更底层的点对点通信模式。它有一个比tcp协议更高的协议。(当然,ZeroMQ不一定基于TCP协议,也可以用于过程间和过程中的通信。)它改变了基于一对一连接的通信假设。这里更适合服务器和服务器之间的通信,比如逻辑服和战斗服之间的通信。4.memcached:一个高性能的分布式内存对象缓存系统,用于动态Web应用,以减少数据库负载。它通过缓存内存中的数据和对象来减少读取数据库的次数,从而提高动态和数据库驱动网站的速度。可用于缓存。例如,客户端每次操作都需要操作数据库,这将严重影响效率。此时,在中间添加一层缓存系统将提高性能。基于http协议的通信memcached是一个不错的选择。如果是tcp长链接,可以直接维护在线内存对象。类似的技术包括redis等。

如何搭建游戏服务器?

 

转载于天翼云知识,如有侵权,请联系删除,谢谢

© 版权声明
广告也精彩

相关文章

广告也精彩

暂无评论

暂无评论...