先说说手机游戏服务器开发需要的技术。
一、谈谈手游服务器开发要考虑什么。
1、开发语言的选择:
如果一个工人想做好他的工作,他必须先磨他的工具。选择合适的开发语法对以后的开发有倍增效应。
业内采用c/c Python/lua模式作为移动游戏服务器,c/c用于网络通信数据传输,Python/lua用于业务逻辑,既保持了网络传输的效率(C),又提高了开发效率(python/lua),还支持热更新。
当然还有其他的服务器开发语言,erlang(没用过,大部分是页面游公司用的),c#(大棒国喜欢用,了不起的nation),Java(第一次听说的时候很震惊),node.js(几个游戏,还有一个node.js写的引擎叫pemolo),php(一个http协议通信的游戏)。
看过两个手机游戏服务器引擎。
1)萤火虫(9秒社区开发的python手机游戏服务器框架)
2)、kbengine(根据bigworld的架构设计,c python)
2.数据库资料库
目前比较流行的数据库有两种,关系数据库mysql和非关系数据库mongodb,这是我用的最多的两种数据库。
两者之间有很多比较,网上。当然,您也可以使用其他数据库。至于sqlserver,大多数开发人员都报告说这个数据库相当差劲。
3.服务器架构
说说我用的它的中架构模型,也是公司根据bigworld架构设计的:
1)首先Gate:应该有一个网关服务器,负责客户端连接和消息转发到Game(游戏套装),保持客户端和服务器的连接。没有逻辑,只有消息的加密和解密,以及客户端和服务器之间的消息转发(相当于它们之间的桥梁)。
2) GameServer:GameServer是游戏中的程并提供游戏逻辑功能(采用单中程(或单线程)模式,移动游戏服务器的瓶颈从来不是CPU。所以如果只做逻辑功能,单线程就够了,不需要用多线程或者多线程)。
3) DBManager:可以读写数据库,方便Game服务器异步读写数据库的数据(有的把数据库读写放在游戏服里,没有单独的服务器,游戏服单独进入程恐怕是不够的)4) GameManager:负责管理所有游戏服务器和游戏服务器之间的消息转发,并提供向所有游戏广播的功能。
4.协议
客户端和服务器之间的协议通信可以通过tcp或http来完成,主要取决于游戏模型。如果是弱联网单人游戏,http就够了,像每天跑步一样,需要的时候只处理一个http请求响应。
然而,tcp被广泛使用。现在的网络游戏大部分都是tcp的,像MMORPG游戏。我们现在的游戏同时使用http和tcp,客户端和游戏套装都使用http协议。Tcp长链接仅在多人对战变成战斗服时使用。
Udp:其实游戏里是有Udp的。在一些高效率的场景中,比如pvp实时作战,tcp拥塞控制和超时重传并不适合。他们有的只是用UDP,然后自己做丢包重传,用网络公平换取游戏的局部效率。
目前,参与开发的游戏同时使用http协议和tcp协议。在游戏套装中,单人游戏使用http协议,战斗套装需要长时间连接来保存协议状态,使用tcp。
5.救援
如果有数据库,则必须有数据库读写操作。最重要的是保存,定期保存还是即时保存。
及时保存意味着每个操作数据都保存到数据库中。当然,这会导致数据库的操作过于频繁,这毕竟是效率的瓶颈之一。
定期保存也叫固定保存,即每固定时间保存一次,比如10秒或15秒,这样对数据库的压力就会小很多。当然你要做好内存中中的数据操作,防止数据污染或者保存文件失败返回。
二是开发手机游戏服务器需要掌握的开源技术。
1.libevent、boost.asio等网络库和网上有很多开源的网络库。与其自己做轮子,不如用开源网络库作为自己服务器的通讯库。最著名的是libevent和boost.asio。
Boostasio是一个异步asio库,封装了socket的常用操作,简化了基于Socket的程序开发,支持Boost-platform。
Libevent是一个用C语言编写的事件驱动的开源网络库。
至于他们之间的效率,不同的人有不同的看法。
当然还有很多:比如云风写的天网(Clua),陈硕写的木铎(c),都写得不错。云风写的东西简单易用。陈硕正在炫耀他的C技术。
2.protobuf:全称google Protocol Buffers,是google为网络通信中的数据存储和协议编解码开发的工具库。它类似于XML或JSON,即以一定的格式(XML、JSON)保存一定数据结构的信息。
Protobuf与XML、JSON的区别在于protobuf基于二进制,主要用于数据存储、传输协议格式等场合。
Protobuf的优点是传输相对大的数据产生的数据非常紧凑小巧,可以显著降低传输量。
而且处理速度比较快,实现了各种编程语言,如C、Java、PHP等。
缺点是不能纯文本编辑(数据是二进制的)
Protobuf rpc数据传输方便,是一个不错的选择。Google protobuf只负责消息的打包和解包,不包括RPC的实现,需要自己实现。
3.zeromq:消息队列是健壮简洁的多进程通信方案的基础。ZeroMQ不是套接字的封装,所以不能用来实现现有的网络协议。它有自己的模式,不同于较低的点对点通信模式。它有比tcp更高级别的协议。(当然,ZeroMQ不一定基于TCP协议,也可以用于进程间和进程内通信。)它改变了通信基于一对一连接的假设。
这里更适合服务器之间的通信,比如逻辑服和战斗服之间的通信。
4.memcached:是一个高性能的分布式内存对象缓存系统,用于动态Web应用,降低数据库负载。它通过在内存中中缓存数据和对象来减少读取数据库的次数,从而提高动态和数据库驱动网站的速度。
它可以用于缓存。比如客户端原本每次都需要操作数据库,会严重影响效率。此时,在中之间增加一层缓存系统将提高性能。Memcached是一个很好的基于http协议的通信选择。如果是tcp长链接,直接维护一个在线内存对象即可。
类似的技术包括redis等等。
5.glog/zlog:你绝对需要记录日记。看你的爱好。
6.tcmalloc:的内存性能分析
7.distcc:分布式编译工具,之前每次修改代码都需要半个小时,用distcc多台电脑同时为你编译要快得多。
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。:https://www.ximenweb.com/10239.html