简单说一下开发手机游戏服务器所需要的技术。
一、说说开发移动设备的游戏服务器时要考虑的问题。
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.服务端架构
说说我用过的一个架构模型,也是公司根据bigworld架构设计的:
1)Gate:首先要有一个Gate服务器(gateway),负责客户端连接和消息转发到游戏(游戏服务器),维护客户端-服务器连接。
没有逻辑,只有消息的加密和解密,以及客户端和服务器消息的转发(相当于两者之间的桥梁)。
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
5. 保存
如果有数据库,就必须有数据库读写操作。最重要的就是保存。定期保存或即时保存。
即时保存就是每次操作都将数据保存到数据库中,当然这样会使数据库操作过于频繁,毕竟这是效率的瓶颈之一。
定期保存也叫固定保存,就是每隔固定的时间保存一次,比如10秒或者15秒,这样对数据库的压力就小很多。当然,您必须在内存中进行数据操作,以避免数据污染或无法保存数据。
2. 开发移动端游戏服务器必须掌握的开源技术。
1. Libevent、boost.asio等网络库。网上有很多开源的网络库。您应该使用开源网络库作为服务器的通信库,而不是创建自己的轮子。最著名的是libevent 和boost.asio。
Boost的ASIO是一个异步I/O库,它封装了Socket中的常用操作,简化了基于socket的程序开发,并且是跨平台兼容的。
libevent是一个用C语言编写的事件驱动的开源网络库
关于两者之间的效率,仁者见仁
当然还有很多像云峰写的天网(c+lua)和陈硕写的木朵(c++)这样的:都写的很好,云峰写的简单好用,陈硕在展示他的C++技术
2、protobuf:的全称是Google Protocol Buffers。它是谷歌开发的用于协议编码和解码的数据存储和网络通信的工具库。它兼容
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://qcxfrb.xfdawan.com/4089.html