[浅谈光遇服务器逻辑问题]没个十年脑瘫写不出这样的服务器

串线、串线、串线,光遇的服务器问题一直困扰着很多玩家——碰到的小黑来不及加好友就串线;牵手的好友跑着跑着就串线;明明当前房间就只有你一个人;但是和你一起的好友还是被分配到了其他的空房间……


大家都嘲笑网易的服务器是“土豆服务器”,但是作为真正“土豆服务器”的育碧,他们的服务器都要比光遇好上太多太多了。用个不恰当的比喻,光遇的服务器就像是上学时候的我,又没钱又想租一个服务器来搭建Minecraft的千人私服一样。
放眼看去,光遇种种类似的问题似乎都能在其他的游戏得到相应的解决答案,但是网易和sky仿佛一直选择无视,无数的问题都严重暴露着,sky对于做一个在线服务型社区游戏有着严重的经验不足。
本次我将分两个经常遇到的问题“串线”和“乐器弹奏”,通过对比其他游戏的方案来抛砖引玉。

图片[1]-[浅谈光遇服务器逻辑问题]没个十年脑瘫写不出这样的服务器-米云博客

1.串线
众所周知,光遇的服务器设定是,每个房间八个人,介于光遇的主要玩法就是“交友”,每次进入一个地图基本会被分配到一个全新的房间内。
但是,服务器并没有加入“好友保护”的规则,无论你是已经点亮的小黑,还是牵手的好友,服务器都默认你们为“互不认识”。
以下是我对光遇服务器在房间分配问题上做出的猜想:
在从一个图进入下一个没有人的空房间时,服务器默认会将在一段固定时间内到此房间满员的时间长度作为进入同一个房间的依据,每个人首先会被分配到一个只有你一个人的空房间内,然后通过服务器的分配塞进服务器为你创建的闲置房间中,而因为每个人之间并没有是否存在好友的依据(甚至是否牵手都不会被记录),服务器只是把你们作为单独的个体进行分配。在进入房间后,服务器又会因为某一种规则,再次对房间内的人员状况进行二次筛选,比如是否满员,网络连接是否正常等。
由此才出现了我们经常遇到的“串线”。那么,既然光遇一边打着交友的名义想做好社区服务,一边又不愿意对自己的服务器进行扩充(甚至有传言和服就是为了缩减服务器),那么就没有办法去解决“串线”的问题吗?
其实答案是有的,下面我来举几个其他游戏的解决方法来谈论是否适用于光遇。

1.传统的线路分配(魔兽,剑灵等传统大型MMORPG为代表)
1线,2线,3线,这样的服务器线路分配是最常见的MMORPG的分流手段,一般会在繁忙的地图设立多个线,而在不繁忙的过渡地图设立1-2个线作为载体。一般一条线上能容纳的人都在百人以上,服务器还会动态对某个突然人流量暴涨的地图增加额外的临时线路,来保证该地图的承载力。
这种办法明显不适用于光遇,无论是地图的大小还是光遇的基本玩法,无限制的往一个地图中塞入大量玩家,相信大家也不愿意看到漫山遍野的小黑吧,但是正是因为有这样一个分线的手段,才能引出下面不同游戏对于线路安排的其他方法。

图片[2]-[浅谈光遇服务器逻辑问题]没个十年脑瘫写不出这样的服务器-米云博客

2.玩家定制房间的分配(原神,崩坏3,王者荣耀,LOL,星际战甲为代表)
玩家定制房间,指的是服务器根据玩家的网络情况,随机分配玩家进入同一个房间中,但是一旦存在在这个房间中,玩家除开网络断开掉线或是主动退出房间的情况外,是会被服务器一直保留在该房间中,甚至有些游戏还为非主观原因退出房间的玩家加入了“重新回到”该房间的规则。
显然,光遇本身其实也是这样一个规则,但是为什么其他游戏可以即时掉线和延迟也能强制让玩家存在同一个分配的房间内,而光遇即使你的网络不出问题,也会出现房间的波动呢?问题其实就是出在服务器本身。
那么既然网易不愿意扩充服务器,有没有办法解决这样的串线?有。
这里我就要举例《星际战甲》,《星际战甲》的房间规则其实也是随机分配玩家,4-8人一个地图进行合作战斗,但是巧妙的是他们游戏的一个服务器规则就很好的分担了服务器可能存在的负载问题——
用一个网络最好的玩家作为该房间的主机。
这也就是为什么当一个主机玩家离开房间的时候,所有的玩家都会出现几秒钟的“主机迁移”字样。这样的办法同样用在了《原神》游戏中,该游戏也是利用一个玩家作为房间的主机,来分担了服务器的负载,这样的规则非常适用于人数规模小的合作类游戏。
虽然这样的服务器规则对于光遇来说并不是非常合适,但是面对网易这样既不愿意扩充服务器,还想要恰烂钱的摆烂态度下,应该是最好的解决办法了。

图片[3]-[浅谈光遇服务器逻辑问题]没个十年脑瘫写不出这样的服务器-米云博客

第一部分总结:
既没有很好的服务起稳定性,又没有判别玩家是否为好友,是否为牵手,是否正在同一个座位上交流或者玩家是否点火的保护机制,造成的频繁“串线”,对于一个社区类游戏的维持,是有多严重的影响,我相信网易里专业的人员应该比我更加明白。
同样的解决办法市面上同类游戏有很多,为了能够让游戏的体验更好,找到一个合适的方案我想对于你们大厂来说并不难吧?
其实我能说的只有一个:找不找得到解决办法是一个方面,而愿不愿意去解决又是另一个方面了。

image_emoticon

2.乐器弹奏
开局我先一吐为快:光遇的乐器弹奏,是我见过所有游戏中最蠢的。
首先在这里说明,乐器弹奏本地听到的和通过服务器传输,让其他玩家听到的差异性的锅,其实不能怪在网易的头上,服务器的不给力虽然也是原因之一,但是最主要的原因还是得怪在sky的头上,因为他们根本就没有对这方面做任何优化,从这一点也足以看出,sky对于做在线服务型社区类游戏的经验不足。
不知道琴佬们有没有用第三方账号听过自己的弹奏,明明在本地自己弹奏的非常完美,而在其他账号上听到自己的琴声要么因为弹奏的过快而缺少一两个音节,要么出现类似网络波动,导致音符之间的时间轴对齐出现很严重的偏差。自己一曲完美的弹奏在别人听起来,像是毫无节奏的雨点淅淅沥沥敲打着琴键。
造成这样现象的原因,就是游戏根本就没有对这方面做任何优化。
那么市面上其他拥有游戏内弹奏系统的社交类游戏是如何处理解决这样问题的呢,下面我一一道来:

1.本地对齐时间轴(FF14、冒险岛2为代表)
这是一个实现实时弹奏并且能够完美复刻弹奏玩家演奏的实战案例,以FF14为例,游戏中引用了一个“本地对齐时间轴”的办法达到了实时弹奏的完美复刻。
首先弹奏者在敲击第一个音符的时候,游戏开始在本地绘制时间轴,并且将玩家的按键依次对齐在时间轴内,通过延迟3-5秒的方法将时间轴上传到服务器,服务器再依照时间轴内的按键分布进行播放。这样的好处在于,既能够达到实时弹奏,也能够将弹奏者的演奏完美复刻。甚至FF14在后来的5.0版本中,利用延迟弹奏的规则加入了节拍器,实现了多个玩家的合奏:首先由队长发起准备,然后节拍器开始打节拍,每个玩家虽然各自因为网速的原因,节拍器起始时间不同,但是只要按照节拍器的节奏弹奏,在本地生成了统一的节拍的弹奏时间轴后,再通过服务器将这些音轨合成,成为一个能够精准对齐的合奏音轨,最后进行播放。

2.服务器演奏乐谱(冒险岛2,天涯明月刀,天涯明月刀手游为代表)
冒险岛2和天刀两款游戏不仅支持实时弹奏,也支持玩家本地谱写曲子,然后直接上传服务器,实现谱子的共享,只需要被共享的人播放此谱,就能达到弹奏者和聆听着听到的都是一样的。
这种办法笨,但是也是实现技术难度最小的一种。缺点就是拓展性不高,也没有合奏的可能性。

第二部分总结:
无论是上面提到的“本地时间轴对齐”还是“服务器乐谱”,在光遇里面都没有得到体现,sky只是一味的希望通过网络数据的传输,将玩家弹奏的每一个音符都即时播放,那么导致的问题不仅是弹奏者和聆听者在同一个时间轴的节点所听到的音符的偏差,甚至也限制了弹奏者的弹奏速度。
首先你必须在一个极好的低延迟网络下进行弹奏,而且你弹奏的速度不能超过服务器的延迟大小,你才有可能让其他玩家听到与你大体相近的演奏效果。虽然服务器能够在卡顿后,很短的一段时间内即时反馈弹奏(就类似于你听一个音乐,突然空了一段时间,然后紧接着和卡顿一样一下子爆发N多音符,这些音符的节奏和弹奏的歌相比类似于快放一般),但是依旧会出现丢音的现象(比如快弹三联音,可能会丢失一个音节)。
这样的体现恰恰证实了sky对社区游戏的细节方面还存在考虑上的欠缺。

© 版权声明
THE END
喜欢就支持一下吧
点赞130赞赏 分享
评论 抢沙发

请登录后发表评论