网站建设 青岛网站建设> 建站学堂 青岛网站建设开发一个游戏服务器需要掌握的开源技术

青岛网站建设开发一个游戏服务器需要掌握的开源技术

来源:网站建设 | 时间:2020-11-03 | 浏览:

开发一个游戏服务器需要掌握的开源技术

热烈欢迎转截,转截请标明全文详细地址:http://blog.csdn.net/majianfei1023/article/details/46716073


从业游戏服务器开发设计类似2年時间,两年里参加了许多新项目,学得了许多游戏服务器开发设计,参加过好多个不一样构架的网络服务器开发设计,就随意聊一聊游戏服务器开发设计必须的技术性。(下列所说游戏服务器更偏重于手游游戏,由于我对电脑网游和网页游戏开发设计触碰并不是很多)


一.聊一聊网络服务器开发设计有什么物品要考虑到。

1.编程语言的挑选:

磨刀不误砍柴工,工欲善其事,挑选一门合适的开发设计英语的语法对中后期开发设计拥有事倍功半的功效。

业内关键的是c/c Python/lua方式做游戏服务器。c/c 做网络通信传输数据,python/lua做领域模型。那样既维持了数据传输的高效率(c ),又提高开发设计高效率(Python/lua),另外也适用热更新。

自然,也是有别的网络服务器编程语言,erlang(未用过,网页游戏企业用的多),c#(大棒子国喜爱用,奇妙的中华民族),Java(第一次听闻时我震惊),node.js(小量游戏用的,还有一个node.js写的模块叫pemolo),php(做http协议书通信的游戏时php mysql也无外乎一种好挑选),...

看了2个游戏服务器模块 

1.firefly(9秒社团活动开发设计的一款python游戏服务器架构) https://github.com/8miao/Firefly

2.kbengine(创作者说他按bigworld的构架设计制作的,c python的) https://github.com/kbengine/kbengine


2.数据库
如今较为时兴的二种数据库,关联型数据库mysql和非关联型数据库mongodb。这是我用的数最多的2个数据库。
有关彼此之间的各种各样较为,在网上有很多,自然你也可以用别的数据库,对于sql server,不害怕被坑你也就用吧(我素来对微软公司的物品没好感度)。

3.服务器端构架
讲一下我使用过的在其中一种构架实体模型,也是企业按照bigworld架构模式的:
1.Gate:最先要有一个Gate(网关ip)网络服务器,承担手机客户端联接及信息分享到Game(游戏服),维持手机客户端到服务器端的联接
沒有一切逻辑性,只做信息数据加密和破译,及其手机客户端和网络服务器信息的分享(等同于彼此之间的公路桥梁).
2.GameServer:GameServer是游戏过程,出示游戏逻辑性作用(选用单过程(或是并行处理)实体模型,游戏服务器的短板从不在CPU,因此 只做逻辑性作用得话并行处理充足了,在这儿没必要用线程同步或多进程)。
3.DBManager:完成数据库的读写能力,便捷Game网络服务器多线程读写能力数据库的数据信息(一些把数据库读写能力放到游戏服,沒有独立的网络服务器,那也许游戏服单过程就不足用了)。
4.GameManager:部门管理全部的GameServer,GameServer中间信息分享,出示广播节目到全部Game的作用。


4.协议书
手机客户端与集群服务器协议书通讯,可以用tcp或是http。关键看游戏实体模型,如果是那类弱连接网络单机版游戏玩法,用http充足了,像天天酷跑3d这类,只在必须的情况下解决一条http要求回应。

但是tcp用的较为還是比较多的。如今的互联网游戏大部分全是tcp,像MMORPG类游戏。大家如今的游戏便是另外用了http和tcp,手机客户端和游戏服选用http协议书。仅有多的人作战转为作战服才选用tcp长连接。

udp:实际上游戏是有udp的,在一些效率高的情景下例如pvp即时战斗,tcp的拥塞控制和请求超时重新传输并不宜,一些就用的udp,随后自己做网络丢包再发,拿互联网公平公正换游戏部分的高效率。

如今参加开发设计的游戏就另外应用了http协议书和tcp协议,在游戏服是单机版游戏玩法用http协议书,作战服必须长连接储存协议书情况,用的tcp。


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:全名Google Protocol Buffers,是google开发设计的的一套用以数据储存,通信网络时用以协议书编码解码的专用工具库。它和XML或是JSON类似,也就是把某类算法设计的信息内容,以某类文件格式(XML,JSON)保存,
protobuf与XML和JSON不一样取决于,protobuf是根据二进制的。关键用以数据储存、传送协议格式等场所。实际见:http://blog.csdn.net/majianfei1023/article/details/45112415

protobuf他的优点是针对传送较为大的数据信息造成的数据信息很紧凑型不大,能够 显著减少传送量。
并且响应速度也较为快,又有各种各样计算机语言的完成,比如C ,Java,PHP这些。
缺陷是不可以密文编写(数据信息是二进制的)。

用protobuf rpc开展传输数据很便捷,因此 是一个非常好的挑选。google protobuf只承担信息的装包和解压工具,并不包含RPC的完成,因此 必须自身完成。


3.zeromq:消息队列,一个稳进,简约的多进程通信计划方案的基本。ZeroMQ 并并不是一个对socket的封裝,不能用它去完成现有的网络层协议。它有自身的方式,有别于更最底层的点到点通信方式。它有比 tcp 协议书高些一级的协议书。(自然 ZeroMQ 不一定根据 TCP 协议书,它还可以用以过程间和过程内通信。)它更改了通信都根据一对一的联接这一假定。
在这儿它更合适网络服务器与集群服务器的通讯,例如逻辑性服和作战服中间开展通讯。

4.memcached:一个性能卓越的分布式系统运行内存目标缓存文件系统软件,用以动态性Web运用以缓解数据库负荷。它根据在运行内存中缓存数据和目标来降低载入数据库的频次,进而提升动态性、数据库驱动器网址的速率。
能够 用于做缓存文件,例如手机客户端原本每一次实际操作都必须实际操作数据库,会比较严重危害高效率,这时候在中间加一层缓存文件系统软件,就提高了特性。根据http协议书的通信用memcached是一个非常好的挑选,如果是tcp长连接,立即维护保养一个线上的运行内存目标就可以了。
相近的技术性也有redis等。

5.glog/zlog:你毫无疑问必须纪录系统日志,看喜好喽。


6.tcmalloc:运行内存特性剖析


7.distcc:分布式系统编译程序专用工具,以前每一次改动编码必须make半小时,用distcc开展几台电脑上另外帮你编译程序,快许多。