我的项目是类似《贪吃蛇》玩法的一款IO游戏,就是几个玩家在游戏界面中可以吃食物,也可以相互吃,吃了食物或对方都会变大这样子。我是在用cocos creator做完前端开发的部分后,开始接入的Matchvs。其实在接触Matchvs之前,也了解过国外的一些产品,比如photon、proudNet,不过网络问题和收费是一个现实问题,...毕竟对于一个人开发者来说技术和资金都比较有限,这点大家应该都懂得。

虽然Matchvs把他们提供的服务官方称为“一站式服务”,其实在我看来主要就是两个,一个是接入他们的SDK,可以实现联网功能。二是gameServer,gameServer命令行工具用于后端代码本地调试。后端的代码提交到Matchvs为我们提供的git仓库,直接运行在它为我们提供的服务器中。
在Matchvs有一些像注册、登陆、加入房间、发送事件这种很通用的功能,这些不用花太多时间就能基本掌握。二对我来说,最大好处还是在于几乎不需要对服务器相关知识有所了解,只需要关注前端和后端的逻辑编写,就可以完成一个游戏的开发。

一开始认为,这些api已经可以满足我大部分的需求,但之后在使用过程中,我发现了它设计中一些存在改进空间的地方。

以下是我在接入Matchvs过程中的部分使用总结:

先说优点吧。

1、api简洁且覆盖面广。

关于数据收发,sdk的api有sendEvent、sendEventNotify、sendEventEx;gameServer的api有pushHander、pushEvent。 游戏的数据交互,只用调用这几个接口就可以了。我的项目属IO项目,类似贪吃蛇,一个玩家给了食物调用sendEvent,另一个玩家绑定sendEventNofity, 数据就从这两个简单的api中传递了。
支持多平台,也可以配合其他游戏引擎使用。

例如: 在windows平台, 我使用cocos creator+matchvs开发,按照以下配置,打包成Web Mobile、Web Desktop、Wechat Game、Android、Windows等等平台。
// 以下是伪代码,调用不用环境的的sdk
var engine
var response = {}
if (isNative) {
engine = Matchvs.MatchvsEngine.getInstance()
} else if (isWeb) {
var jsMatchvs = require("matchvs。all")
engine = new jsMatchvs.MatchvsEngine()
response = new jsMatchvs.MatchvsResponse()
} else ...

2、gameServer比较实用。

如果游戏逻辑简单,简单到只需要客户端运行所有的逻辑代码,我们就可以不使用gameServer。 如果游戏逻辑复杂,可以使用gameServer来同一管理所有的客户端。
gameServer+node(gs),使会js的人就可以写后端代码,开发速度更快。

例如在我的项目里,由于房主会变化,客户端中,用房主来判断游戏是否要开始是很繁琐的。 让gs这个大管家来判断的话,就显得很方便, 客户端不需要太关注房主的改变,只需要关心是不是要开始游戏,减少了客户端if-else逻辑。
Matchvs提供了断线重连的功能。
在一些网络差(地铁,电梯),已与服务器异常断开的情况,matchvs会帮助玩家自动连接,开发者可以设置连接次数和频率,但只能满足一些基础场景。

例如: 如果掉线重连了,loginResponse会返回一个roomId的参数,表示是断线重新的, 这时,客户端可以选择重连和忽略。
多节点服务器部署以及帧同步技术

例如: 我的项目是IO游戏,玩家移动的过程中,不断的传递当前位置的数据,画面看上去还是很流畅的,感觉游戏延迟还挺不错的。开发者不用担心数据同步的问题,也不需要对服务器有太多了解,就可以完成一个游戏。感觉还是很棒的。

缺点。

目前,Matchvs主要围绕着'房间'这个概念。创建、加入、获取房间,房间内各成员数据发送和接受。 所以目前不适用于房间外数据发收的场景。

例如: 客户端中,需要修改用户名,这个操作就不能轻松实现。

目前GS不支持数据库,而是使用hashSet,hashGet,用起来太麻烦。 如果有数据存取的需求,开发者需要自己买个数据库服务。
希望后续有数据库支持,或者改为支持使用官方提供的数据库和自己购买的数据库。

GS的命令行工具部分不太好用,存在一些小问题
登陆时密码没有隐藏,错误提示令人不解。
退出是输入quit,而不是习惯的ctrl+c。
关闭debug,断开时间太长,甚至有时无响应。有时只好强关。
gs+node服务使用热更新,会导致gs服务断开等等一些小问题。

官网中,对应的文档比较难找,引导性不强。找个文档需要花不少时间,跟Matchvs团队反馈后是说文档会持续优化,近期也会改版一次文档中心的结构。
有些接口和方法并没有在官方中说明,只能通过查看源码或者询问官方了解使用方法。

例如: 在研究Demo-GS-JS的时候,想到一个问题,gameServer给客户端推送消息的时候,客户端用什么来监听。后来,知道是由sendEventNotify来接收的。
我发现文档并没有这个描述。官网表示,会尽快补上所有的缺少的说明
回调的写法不科学。

例如: mvs。response。sendEventResponse = callback(msg){} mvs。engine。sendEvent(data) 这种写法是很不科学的,如果后续代码中也有sendEventResponse, 在此之前的sendEventResponse就会被覆盖。

建议: 回调的方式改成 sendEvent(data, callback(err, msg) { })
特别提示
随机加入和指定加入的房间是相互独立的。

例如: 通过'随机加入'加入的房间,用户想通过'指定加入',是加入不了这个房间的。
官方人员解释也是这么一回事。但是,官方文档并没有说明,希望官方人员注意到这一点。
刚收到joinRoomNotify通知时,用户与其他用户不一定能消息通知。

例如: 此时其他人(客户端)给加入者发送消息,这个加入者很大可能不会收到。

官方人员给予了解释: '这时用户已经在房间中了,但是还没有和其它玩家建立通讯通道。目前js-SDK还不够完善,应该确定通道建立完成后再发出joinRoomNotify通知', 并表示后续版本会修改这个bug。

我的解决方案: 在上述的加入者joinRoomResponse的时候,发送isEnter消息,告知其他人,我是真的进来了。

问题与建议差不多就这些了,不过有一点要说明下,虽然在之后的使用过程中的确遇到的一些问题,但这里要特别感谢下官方客服在Q群里面耐心解答与卖力优化(可以感觉到这是一个在用心做产品的团队,现在想起来那个客服八成就是Matchvs的产品),让游戏顺利上线并保持稳定运行。

PS:听说Matchvs最近马上要更新一个大版本优化,小小期待一下,希望能越来越好吧。

关于Matchvs一些使用心得与建议的更多相关文章

  1. Python使用心得之魔法参数**kw

    通过设置字典类型参数直接传递给接收魔法参数(**kw)的方法,对应赋值.示例如下: jdbcConnectionDict = {, , 'database': 'test', 'charset': ' ...

  2. 单片机小白应该如何学习stm32的一些实践心得!

    嵌入式搬砖道路上的大三狗一枚,撑死算个初学者吧.才学有限,下面仅仅是本人对STM32学习的一点心得与建议,希望对题主有帮助吧. 心得:本人当初学习STM32的时候有一些跟风的因素,自以为学的芯片越多就 ...

  3. JS面向对象的程序设计

    面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装.继承.多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义J ...

  4. 知道创宇研发技能表v3.1

    by @知道创宇(www.knownsec.com) @余弦 & 404团队 后续动态请关注微信公众号:Lazy-Thought 说明 关于知道创宇 知行合一 | 守正出奇 知道创宇是一家黑客 ...

  5. 知道创宇研发技能表v3.0

    知道创宇研发技能表v3.0 2015/8/21 发布 by @知道创宇(www.knownsec.com) @余弦 & 404团队 后续动态请关注微信公众号:Lazy-Thought 说明 关 ...

  6. 装黑苹果的那些事儿(以ThinkpadE540为例)

    苹果系统,有着比window更好的安全性和方便性,更重要的事,没有MAC系统环境,进行iOS开发,是很麻烦的,对新手来说,是很懊恼的一件事.但是白苹果像件奢侈品,吾等常人,很难有经济消费.如是黑苹果是 ...

  7. Linux服务器建站基础-选择何种配置和安装环境项目

    我们准备在搬瓦工笔记中,边整理和分享利用Linux VPS建站过程的同时,也会分享关于用户在选择和使用VPS服务器以及网站管理运营中的一些心得和建议.经常有很多网友在很多主机论坛.QQ群众问道,有没有 ...

  8. 速成KeePass全局自动填表登录QQ与迅雷(包括中文输入法状态时用中文用户名一键登录)

    原文:http://bbs.kafan.cn/thread-1637531-1-1.html 使用目的:1 网页和本地客户端登录一站式解决2 通过KeePss修改密码和登录更方便,可以复制粘贴,省了输 ...

  9. 91 Testing Linux学习笔记

    91 Testing Linux学习笔记... 学习地址:91Testing 的Linux教程=====================学习网址:http://www.91testing.net/ar ...

随机推荐

  1. MySQL 主从复制那些事(一)

    本部分主要以理论为主,具体的主从搭建环境,大家可以参考博客其他部分.下面我就给大家数说主从复制那些理论的东西.说的不一定都是正确的,有不同出入的地方,欢迎大家一起交流沟通,以下我把我自己整理出来的主从 ...

  2. emqtt 试用(六)系统主题

    $SYS-系统主题 EMQ 消息服务器周期性发布自身运行状态.MQTT 协议统计.客户端上下线状态到 $SYS/ 开头系统主题. $SYS 主题路径以 "$SYS/brokers/{node ...

  3. Angular 学习笔记 ( 链接服务器 )

    ng 是做前端开发的, 所以通常我们会配上一个 API server. 本地调试时通常使用 proxy https://github.com/angular/angular-cli/blob/mast ...

  4. vscode调试适配器已意外终止

    出现这个错误了,找半天没找到办法.师兄支了一招: 把图中红圈部分删掉! 这是个旧的配置文件 ,你删掉它(反正一直报错误,也用不成了!).然后你调试一个文件,它会重新自动添加新的配置文件.

  5. JavaScript 重点笔记

    JavaScript 重点笔记 ## 数组 // 必须掌握 - arr.length:获取数组元素的长度 - arr.splice(起始位置,长度):从数组中添加或删除元素. - arr.indexO ...

  6. git出现错误原因解释

    原因,在pull下拉代码或者push之前,你本地还有代码没有进行commit. 引起下面的错误.   建议commit后先pull再看看有没有冲突在进行push. git.exe push --pro ...

  7. requests-所有异常归类

    IOError RequestException HTTPError(RequestException) UnrewindableBodyError(RequestException) RetryEr ...

  8. enumerate给列表加索引

    >>> list = ['a','b','c'] >>> for i,j in enumerate(list): print(i,j) 0 a 1 b 2 c &g ...

  9. glut 深度测试无不起作用问题解决

    OpenGL中使用glEnable(GL_DEPTH_TEST)后深度测试没有起作用,发现深度缓冲没有创建.glut库在兼容模式(GL_COMPATIBILITY_PROFILE)下displaymo ...

  10. [LeetCode] Maximum Sum of 3 Non-Overlapping Subarrays 三个非重叠子数组的最大和

    In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. E ...