动作手游技术漫谈-网络方案

现如今能用心做单机游戏的开发商越来越少了,我们身边充斥着XX手游月入千万,XX手游公司估值几亿的神话。手机游戏是一种比较特殊的游戏,手机随身,玩起来方便,玩家随时随地都可以玩;它可以联网,但网络条件通常又不那么好,玩家可能有流量的限制,可能网络不稳定,可能网速不快。但是和单机游戏比网络确实可以给游戏增色不少,有网络才有社交的可能,伟大领袖曾说过,与人玩其乐无穷。

动作手游是选择弱联网还是长连呢?这个看具体的需求。所谓弱联网就是使用http协议,每次玩家操作需要数据的时候才通过http协议请求服务器,数据返回后连接断开,不维持Socket连接。所谓长连就是玩家登录后就和服务器建立Socket连接,直到玩家下线。对大多数手游来说长连是没有必要的。手游和服务器通信的主要目的有两个:一是同步玩家数据,一是广播消息。同步玩家数据,使用弱联网就可以了,玩家打开背包,请求服务器获取背包,玩家进入战斗,请求服务器扣除体力,成功则进入关卡,失败则提示体力不足,完全没有必要维持连接。广播消息的话涉及到服务器向前端推送数据,这时候确实有维持Socket的必要了。什么?还可以用前端轮询的方法?手游应该很少会这么做,花的是玩家的流量啊。

一般游戏用到广播消息的地方也就是聊天了,如果只是聊天的话可以单独做一个长连的聊天服务器,其他部分还是用弱联网的。为什么能不用长连就不用呢?从服务端来看,长连就意味着每个在线用户都需要维持socket连接而服务器的socket数量是有限制的,这就大大降低了每个服务器可以支持的玩家数。如果同时在线玩家数超过了服务器负载的话就要考虑Load Balance的机制了。长连还意味着玩家的请求都是有状态的,长连的消息中一般就只包含消息类型和极少的参数,服务器需要保存玩家当时的状态,例如玩家是在主城还是在战斗中呢?这会加大服务器开发的复杂度和出bug的可能性。长连还需要加入心跳来检测前端有没有断开socket,因为手游的网络环境很不稳定,说不定一会就非正常断开了,服务器如果不知道,就不能回收资源。从前端来看,长连的麻烦在于需要处理好手机端的各种异常,例如玩家在2G/3G信号不好的情况下,连接还在,但是却没有数据返回;玩家按下Home按钮;手机自动锁屏了;玩家断网之后如何重连等等。

如果游戏有主城,主城中又可以看到其他在线玩家,需要同步玩家的进出和走动,这个也是需要用到长连的,同样这部分也可以使用单独的长连服务器。不过手机端同屏的人数有限,太多肯定会引起手机的卡顿,一般同屏20人就差不多了,同屏50人以上密密麻麻也看不清楚。所以各位产品就不要指望去营造一个人山人海的氛围了。关于走动在技术上还是有些技巧的。首先是移动消息的设计,移动是一个连续的过程,但是消息的广播确是离散的。所以移动消息不可能只是发送一个坐标,收到消息的前端直接设置玩家的位置到那个坐标点,这样你看到的玩家都是会闪现技能的。比较长规的做法是使用预测同步,每个服务器同步消息中包含玩家当前的服务器位置和运动的方向,然后前端根据玩家客户端的位置和方向向服务器位置做插值,使玩家跑到指定位置而不是闪到指定位置,这样你可能看到玩家跑动有快慢,但是不会闪过去。其次是同步的频率,主城中有很多玩家,每个玩家以一个固定的频率向服务器发送自己的位置,服务器在收到这些位置数据后不是直接转发,而是需要打包后以固定的频率广播给其他玩家。

有的产品一谈到动作手游就会有做实时PVP的冲动。在手机上,目前的网络条件下,这基本没戏。别说实时PVP了,就是在关卡中服务器出怪和掉落都不行,因为手机的网络太不稳定了,有时候延时会高得惊人,我曾经遇到过10s以上的wifi延迟,玩家看到的就是10s不出怪(或者10s怪物躺地上不消失)。玩家不会觉得这是网络问题,而觉得是你游戏的问题。因为他玩人家的游戏都是好好的。是啊,因为人家的游戏出怪和掉落都是前端直接计算的,不信你试试刀塔传奇,进了战斗断网照样能打。所以目前做手游,还是尽量把逻辑放到前端吧,玩家体验是第一位的。可能你的方案在测试的时候都是好的,可以接受的,但是到了玩家的网络环境下就不好了。如果你一定要做实时PVP,最好demo的时候就去地铁上试试。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值