近年来,随着智能手机的飞速发展,手游也随之迅速崛起,而称霸端游多年的《英雄联盟》一直未推出手游版本,也是许多玩家十分遗憾。在今天上午《英雄联盟》正版手游已正式开启预约。手游上线,手游服务器也要与时俱进,及时做好数据备份工作。那么,手游服务器该如何开发呢?

从事游戏服务器开发差不多两年时间,两年间参与了不少项目,学到了很多游戏服务器开发技术,参与过几个不同架构的服务器开发,就随便聊聊游戏服务器开发需要的技术。(以下所指游戏服务器更偏向于手游,因为我对端游和页游开发接触并不多)

一.聊聊服务器开发有哪些东西要考虑。

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。这是我用的最多的两个数据库。

关于两者之间的各种比较,网上有很多,当然你也可以用其他数据库,至于sql server,不怕被坑你就用吧(我向来对微软的东西没好感)。

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协议,战斗服需要长连接保存协议状态,用的tcp。

5.存盘

有数据库就肯定有数据库读写操作,最主要的还是存盘(save),周期存盘还是即时存盘

即时存盘就是每一次操作数据都进行存到数据库,当然这样会导致对数据库的操作过于频繁,毕竟这是效率的瓶颈之一。

周期存盘也叫固定存盘,就是每隔固定时间存盘一次,比如10秒或者15秒,这样数据库的压力就会小很多,当然自己就要在内存中做好数据操作,防止数据污染或者存盘不上导致回档。

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

1.libevent,boost.asio等网络库,网上有很多开源网络库,与其自己造轮子,不如就用开源网络库作为自己服务器的通讯库。最出名的就属libevent和boost.asio了。

Boost的ASIO是一个异步IO库,封装了对Socket的常用操作,简化了基于socket程序的开发。支持跨平台。

libevent是一个C语言写的事件驱动的开源网络库。

至于二者之间的效率,仁者见仁。

当然还有很多:比如云风写的skynet(c + lua),陈硕写的muduo(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 并不是一个对socket的封装,不能用它去实现已有的网络协议。它有自己的模式,不同于更底层的点对点通讯模式。它有比 tcp 协议更高一级的协议。(当然 ZeroMQ 不一定基于 TCP 协议,它也可以用于进程间和进程内通讯。)它改变了通讯都基于一对一的连接这个假设。

在这里它更适合服务器与服务器之间的通信,比如逻辑服和战斗服之间进行通信。

4.memcached:一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

可以用来做缓存,比如客户端本来每次操作都需要操作数据库,会严重影响效率,这时在中间加一层缓存系统,就提升了性能。基于http协议的通信用memcached是一个不错的选择,如果是tcp长链接,直接维护一个在线的内存对象就可以了。

类似的技术还有redis等。

5.glog/zlog:你肯定需要记录日志,看爱好喽。

6.tcmalloc:内存性能分析

7.distcc:分布式编译工具,之前每次修改代码都要make半个小时,用distcc进行多台电脑同时帮你编译,快很多。

原文链接:https://blog.csdn.net/majianfei1023/article/details/46716073

长按二维码,关注我们

新睿云,让云服务触手可及

云主机|云存储|云数据库|云网络

点击“阅读原文”参与活动

英雄联盟手游开启预约,服务器又该如何开发?相关推荐

  1. 英雄联盟手游测试服显示服务器尚未开启,英雄联盟手游进不去怎么办

    进不去游戏是许多玩家体验英雄联盟手游时出现的一个状况,一般提示为无法连接服务器或者不在白名单,那么遇见这种情况一般是怎么解决的呢?这里为各位小伙伴带来进不去的相关解决方式吧. LOL手游进不去解决办法 ...

  2. 英雄联盟手游显示连接服务器失败,英雄联盟手游连接超时怎么办 无法登录解决方法...

    LOL手游国服开启了新一轮的超燃测试,想必不少小伙伴们都拿到了此次测试的资格,不过一些小伙伴们在登录的时候却遇到了连接超时的情况,遇到英雄联盟手游连接超时怎么办?这里就来和大家分享一下连招超时.无法登 ...

  3. 英雄联盟手游国服内测服务器维护,英雄联盟手游国服内测资格怎么获得 国服内测资格获取方法一览...

    5月10日<英雄联盟手游>官方宣布,正式开启国服测试招募,这次招募将于即日起至5月17日开启,测试开始时间预计为5月下旬或6月上旬.本次测试仅招募安卓用户,iOS用户需等待下次测试. 玩家 ...

  4. 炸燃!《英雄联盟手游》反向跳票!十一大免费福利攻略!不限号不删档全面开启公测!速度冲~!

    <英雄联盟手游>在经历了9月15日跳票事件之后,很多玩家都担心上线日期会变得遥遥无期.然而在国庆假期结束后的第一个工作日凌晨,<英雄联盟手游>官网发布了关于不限号不删档测试开服 ...

  5. 英雄联盟手游登录注册地与服务器不匹配,英雄联盟手游提示Unable to login地区不支持怎么解决 地区不支持解决方法_手心游戏...

    <英雄联盟手游>由于服务器不再国内,许多玩家在玩外服的时候都遇到了各种各样的问题,特别的麻烦,本次网友反映了Unable to login地区不支持的相关问题,手心游戏小编就专门给大家带来 ...

  6. 英雄联盟手游显示服务器尚未开启什么意思,英雄联盟手游could not connect to the server是什么意思-could not解决办法[图文]-游戏窝...

    <英雄联盟手游>公测已经开启了,目前IOS和安卓平台都已经可以下载了,不过需要下载海外版的,很多下载了游戏的玩家打开游戏后会提示could not connect to the serve ...

  7. 英雄联盟手游服务器什么时候修复,英雄联盟手游服务器什么时候开启 lol手游服务器尚未开启怎么回事[多图]...

    英雄联盟手游服务器登不上去,这个是怎么回事,安卓的体验玩法很多的,这样的服务器直接崩溃了,ios直接跳票到29日了,这个怎么回事,服务器什么时候可以好,下面就来介绍下英雄联盟手游服务器尚未开启怎么回事 ...

  8. 英雄联盟手游超燃测试服务器维护,《英雄联盟手游》超燃测试放号开启,轻松教你获得测试资格...

    说起英雄联盟手游这款游戏,国服的英雄联盟端游玩家们可谓是期待了好久,这不前段时间刚结束了A测,紧接着不久B测又来了,在座的小伙伴们想知道怎么获得英雄联盟手游国服内测资格吗?别急,让我们接着往下看,操作 ...

  9. lol手游账号服务器,英雄联盟手游

    英雄联盟手游怎么转区?英雄联盟手游之前开启了海外很多个服务器.有些玩家已经注册了账号,那么不同服务器之间要怎么转服呢?小编已经帮大家准备好了相关内容,希望可以帮助到大家,一起来看看吧. 英雄联盟手游账 ...

最新文章

  1. count 有条件 mysql_【笔记】Mysql中使用count加条件统计
  2. 人工智能 信道估计 深度学习_DEMO演示|基于IVP02D 人工智能工作站的深度学习引擎,实现人群热力估计...
  3. JAVA,如何判断点是否在面内
  4. 2021-2025年中国云日志服务行业市场供需与战略研究报告
  5. JQuery实现灯箱特效
  6. 计算机网络监控技术,实现网络流量监控的核心技术要求
  7. 日语生可以选计算机专业吗,高考日语生,不建议你大学报日语专业!
  8. 英式音标26字母(U-Z)
  9. python+VBA实现照片转Excel
  10. Chrome浏览器和Edge浏览器永久开启始终允许Flash插件
  11. 推特图片搜索php,使用PHP通过twitter api获取twitter的推文信息
  12. JAVA-------封装+Private关键字+权限修饰符+This关键字
  13. 2021级-JAVA06 继承和多态、抽象类和接口
  14. 思维决定转行---35岁转行成功的程序员如是说
  15. [转载]中国文明网:拒绝语言暴力不做孩子的差评师
  16. 计算机神经科学导师,清华大学计算机科学与技术系导师简介:胡晓林
  17. 中国人工智能发展现状与未来
  18. 次世代ZB到底难不难?次世代Zbrush入门常见问答,你准备好了吗
  19. 学校校园学生寝室管理查寝打分系统 毕业设计毕设源码毕业论文开题报告参考(2)班主任功能
  20. 建筑CAD图库:CAD软件中剖面门窗库的使用技巧

热门文章

  1. Vue动态绑定class与设置style
  2. Ubuntu20.04安装xfce4桌面
  3. 快照原理(全拷贝快照、cow、row)
  4. iOS性能优化 - 启动优化
  5. linux命令冒号加叹号,【转载】Linux中的叹号命令
  6. 大数据学习环境搭建系列(十二)Xshell的安装使用
  7. 天池大赛-天猫重复购买用户预测
  8. 『杭电1434』幸福列车
  9. mysql5.7使用binlog 恢复数据的方法
  10. python 程序员专属情话_程序员最浪漫情话