春节以来,新型肺炎在全国蔓延。为了防止病毒扩散,全国各地的道路和城市都被封闭,人们基本都呆在家里。导致国内很多行业如养殖、娱乐、零售、旅游、餐饮等损失惨重。
然而,一个行业在这个假期爆发了。
什么行业?既然只能呆在家里,精神娱乐就不能少。于是,在国内很多行业因为疫情陷入低迷的时候,游戏行业却实现了逆势增长。毕竟无聊的时候玩游戏是个不错的选择。
上线手游,手游服务器也要与时俱进,及时做好数据备份。那么,手游服务器应该如何开发呢?
只说世界上手机游戏服务器发展需要的技术。
一、谈谈手游服务器开发需要考虑哪些事情。
1.开发语言的选择:
欲善其事,必先利其器。选择一个合适的开发语法,对后期的开发会有事半功倍的效果。
业内主要模式是c/c+++Python/lua作为手游服务器。C/c++做网络通信数据传输,python/lua做业务逻辑。这样既保持了网络传输的效率(c++),又提高了开发效率(Python/lua),还支持热更新。
当然还有其他的服务器开发语言,erlang(没用过,页游公司用的),c#(大棒子国用的,神奇的民族),Java(刚听说的时候很震惊),node.js(少数游戏用的,node.js写的一个引擎叫pemolo),php(玩http协议通讯的游戏php+mysql不输)。
见过两个手机游戏服务器引擎。
1.firefly(9秒社区开发的python手机游戏服务器框架)
2.kbengine(按照bigworld的架构设计,c+++python)
2.数据库ˌ资料库
现在有两种流行的数据库,关系数据库mysql和非关系数据库mongodb。这是我用得最多的两个数据库。
网上有很多两者的对比,当然也可以用其他数据库。至于sqlserver,不怕被坑就用吧(我一直不喜欢微软的东西)。
3.服务器架构
说说我用过的一个架构模型,也是公司按照大世界架构设计的:
1.Gate:首先要有一个Gate服务器,负责客户端连接和消息转发到游戏,保持客户端和服务器的连接。
没有逻辑,只有消息加密解密,客户端和服务器之间的消息转发(相当于两者之间的桥梁)。
2.GameServer:GameServer是一个游戏进程,提供游戏逻辑功能(采用单进程(或者单线程)模型,手游服务器的瓶颈从来都不是CPU,所以单线程如果只是执行逻辑功能就足够了,所以这里不需要使用多线程或者多进程)。
3.DBManager:实现数据库的读写,方便游戏服务器异步读写数据库的数据(有的把数据库读写放在游戏服务器,没有单独的服务器,恐怕游戏服务器进程不够)。
4.GameManager:负责管理所有游戏服务器,游戏服务器之间的消息转发,提供对所有游戏进行广播的功能。
4.协议
客户端和服务器之间的协议通信可以使用tcp或http。主要看游戏模型。如果是联网弱的单机游戏,用http就够了,比如天天酷跑,需要的时候只处理一个http请求响应。
然而,tcp被广泛使用。现在,大多数网络游戏都是tcp,像MMORPG游戏。我们的游戏现在同时使用http和tcp,客户端和游戏服使用http协议。Tcp长链接只在多人对战转战服时使用。
Udp:其实游戏有udp。在一些高效率的场景下,比如pvp即时战斗,tcp拥塞控制和超时重传并不适合。他们有的用udp,然后自己做丢包重传,用网络公平性换取游戏的局部效率。
现在,参与开发的游戏同时使用http协议和tcp协议。游戏服中,http协议用于单人游戏,战斗服需要长连接保存协议状态,使用tcp。
保存
有数据库就要有数据库读写 *** 作,最重要的是保存,定期保存或者即时保存。
即时保存是指每一次 *** 作数据都保存到数据库中,这当然导致对数据库的 *** 作过于频繁。毕竟这是效率的瓶颈之一。
定期保存也叫固定保存,就是每隔一个固定的时间进行保存,比如10秒或者15秒,这样数据库的压力会小很多。当然,你要做好内存中的数据 *** 作,防止数据污染或者保存失败会导致文件返回。
世界数据游戏服务器解决方案图
二。开发移动游戏服务器需要掌握的开源技术
1.libevent,boost.asio等网络库。互联网上有很多开源网络库。与其自己做轮子,不如用开源的网络库作为自己服务器的通信库。最著名的有libevent和boost.asio..
Boost的ASIO是一个异步IO库,封装了socket的常用 *** 作,简化了基于Socket的程序开发。支持跨平台。
Libevent是一个事件驱动的开源网络库,用C语言编写。
至于两者之间的效率,不同的人有不同的看法。
当然还有很多其他的,比如冯云写的天网(c+lua)和陈硕写的木铎(c++)。都写得很好。冯云写的东西简单易用。陈硕正在展示他的c++技术。
2.protobuf:全称googleProtocolBuffers,是google开发的一个工具库,用于网络通信过程中的数据存储和协议编解码。它类似于XML或JSON,即某种数据结构的信息以某种格式(XML,JSON)保存。
Protobuf与XML和JSON的不同之处在于,protobuf是基于二进制的。主要用于数据存储、传输协议格式等场合。
Protobuf的优点是传输比较大的数据产生的数据非常紧凑小,可以显著降低传输量。
而且处理速度快,有各种编程语言,比如C++,Java,PHP等等。
缺点是不能以纯文本编辑(数据是二进制的)。
Protobufrpc方便数据传输,是个不错的选择。Googleprotobuf只负责消息的打包和解包,不包括RPC的实现,需要自己实现。
3.zeromq:消息队列,健壮而简洁的多进程通信方案的基础。ZeroMQ不是socket的包,所以不能用来实现现有的网络协议。它有自己的模式,不同于更低级的点对点通信模式。它的协议级别比tcp高。(当然,ZeroMQ不一定基于TCP协议,也可以用于进程间和进程内通信。)它改变了通信是基于一对一连接的假设。
这里比较适合服务器对服务器的通信,比如逻辑服和战斗服之间的通信。
4.memcached:一个高性能的分布式内存对象缓存系统,用于动态Web应用程序以减少数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态的、数据库驱动的网站的速度。
它可以用作缓存。比如客户端每次都需要 *** 作数据库,会严重影响效率。这时候在中间加一层缓存系统,性能会有所提升。对于基于http协议的通信,Memcached是一个很好的选择。如果是tcp长链接,直接维护一个在线内存对象就够了。
类似的技术还有redis等。
5.glog/zlog:肯定需要写日记和观察爱好。
6.tcmalloc:内存性能分析
7.distcc:分布式编译工具。以前,每次修改代码都要花半个小时。使用distcc帮助您同时为多台计算机编译要快得多。
天下拥有超过15年的游戏运营经验,在全球拥有50+CN2顶级网络和1300+CDN节点资源,包括香港、中国、美国、日本、韩国、新加坡、马来西亚等10多个国家的CN2高速专线直接接入。无条件免备案,提供智能DDOS防护升级、负载均衡优化、数据库集群服务及建议、高安全性CDN节点布局优化等一系列优质服务,打造适合企业牢牢把握客户全球布局的全方位游戏解决方案。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)