背景

这次想开发一个双屏互动的案例,考虑到数据实时性及ajax轮询对服务器的压力,尝试用websocket来实现。

自行搭建websocket服务,时间成本和技术成本较高,故寻找第三方服务。经检索,发现goeasy、LeanCloud、野狗云,三家“实时通信引擎”服务商,分析文档考虑价格、便捷性,决定用野狗。

项目分析

“我和女神的故事”H5的玩法逻辑是:

第一步,用户A进入链接显示二维码“页面一”;

第二步,用户B扫描二维码配对成功显示“页面三”,用户A则显示“页面二”;

第三步,用户B点击送花按钮,鲜花由“页面三”飞入“页面二”,实现屌丝给女神送花互动。

        开发思路(二维码->配对成功->开始互动):
        第一部手机,随机生成roomID(创建房间);
        第二部手机,通过roomID(扫描二维码)进行匹配;
        第二部手机,点击交互,两部手机分别播放相应动画。

        数据库结构
        一级:room
        二级:         roomID(唯一性)
        三级:                        pairState(配对状态 false/true)

emitState(发射状态 false/true)

数据在野狗里显示为下图:

实现

按照野狗的文档,先初始化实例,分为三步,第一步创建应用,第二步安装SDK(cocos要导为插件,如果是html直接引入javascript即可),第三步创建Sync实例。

用户A代码部分,

写入数据,set() 方法用于向指定节点写入数据,

        // 用户A,创建房间var roomID = this.getRandChar(3); // 房间ID,时间戳+随机数ref.child("rooms/" + roomID).set({"pairState": false, // 初始化配对状态"emitState": false  // 初始化发射状态 }, function(error) {if (error == null){// 数据同步到野狗云端成功完成// 显示出二维码“页面一”}});

(生成二维码的方法见《html5网页及Cocos中生成二维码》)

监听数据,on() 或 once() 方法用于监听节点的数据,update() 方法用于更新指定子节点,

        // 用户A,监测配对状态ref.child("rooms/" + roomID + "/pairState").on('value', function(data) { if(data.val()){// 配对成功,显示“页面二”}}, function(error) {});// 用户A,监测发射状态ref.child("rooms/" + roomID + "/emitState").on('value', function(data) { if(data.val()){// 监测到发射状态为true,播放“收到鲜花”的动效// 恢复发射状态为falseref.child("rooms/" + roomID).update({"emitState": false}, function(error) {if (error == null){// 数据同步到野狗云端成功完成}});}}, function(error) {});

用户B代码部分,

        // 用户B,更新配对状态this.roomID = this.getUrlParam("roomID"); // 通过扫描二维码打开带有房间ID参数的链接,获取房间IDthis.ref.child("rooms/" + this.roomID).update({"pairState": true}, function(error) {if (error == null){// 数据同步到野狗云端成功完成// 配对成功,显示“页面三”}});

点击送花按钮,

        // 用户B,更新发射状态this.ref.child("rooms/" + this.roomID).update({"emitState": true}, function(error) {if (error == null){// 数据同步到野狗云端成功完成// 播放“送出鲜花”的动效}});

要注意一点,在写代码时一定要把访问数据的路径写对。

在cocos里鲜花用到了对象池和动画,没有什么难点。以上就完成了项目。

Demo二维码

BTW

1、通过这次Demo发现,这是个纯前端的开发,根本没涉及到接口和数据库。这种“无后端开发”对于轻量级的H5开发来说确实便捷,接口数据库这些都不需要自行开发,会节省大量的开发时间。

2、野狗是分服务等级的,对日活跃设备数有限制。正式项目的开发,要考虑流量及成本来决定是否采用此服务。

3、分析几个“双屏互动H5案例”(链接在底部),案例2奔驰采用的websocket、案例3杜蕾斯用的ajax,所以双屏互动开发websocket并不是唯一的选择。后续分享一篇使用阿里云(ECS+RDS)实现交互的博文

参考链接

野狗说明文档:https://docs.wilddog.com/sync/Web/index.html

goeasy说明文档:http://goeasy.io/resources/www/docs/goeasy-reference-0.1.18-cn.pdf

LeanCloud说明文档 :https://leancloud.cn/docs/js_realtime.html

高大上的双屏互动,你玩过了吗?【双屏互动H5欣赏】:https://www.iguoguo.net/2015/58411.html

WebSocket实现多屏互动的分析及方案:https://blog.csdn.net/u012889638/article/details/50586783

简单理解Socket:http://www.cnblogs.com/dolphinX/p/3460545.html

leancloud和野狗有什么区别,优势在哪?:https://www.zhihu.com/question/37301314

为什么创业公司不再需要后端工程师?:

https://cn.technode.com/post/2015-03-16/do-not-need-backend-engineer/

用“websocket第三方服务”野狗云实现双屏互动H5相关推荐

  1. 第三方服务-阿里云视频点播服务java服务端SDK相关代码

    视频点播服务中的视频,也依然是存在OSS上的,但是区别是什么呢?下面关于区别的描述摘自阿里云官网 视频的点播场景涉及视频的存储.转码.分发加速几个环节,那么: 视频点播是集视频音视频采集.编辑.上传. ...

  2. Android实战——第三方服务之Bmob后端云的推送服务的集成和使用(三)

    第三方服务之Bmob后端云的推送服务的集成和使用(三) 事先说明:这里的一切操作都是在集成了BmobSDK之后实现的,如果对Bmob还不了解的话,请关注我第一篇Bmob文章 步骤一:推送服务的集成 在 ...

  3. 第三方服务整合-阿里云OSS上传文件-填坑

    目录 如下,引入aliyun-oss失败: 原因: 解决方法 OssController 如下,引入aliyun-oss失败: com.alibaba.cloud:aliyun-oss-spring- ...

  4. SAP云平台上的ABAP编程环境里如何消费第三方服务

    在ABAP On-Premises环境下,使用ABAP编程消费第三方服务,相信很多ABAP顾问都已经非常熟悉了,无非就是使用CL_HTTP_CLIENT或者CL_REST_HTTP_CLIENT来发送 ...

  5. Android实战——第三方服务之Bmob后端云的答题系统小项目(四)

    第三方服务之Bmob后端云的答题系统小项目(四) 事先说明:这里的一切操作都是在集成了BmobSDK之后实现的,如果对Bmob还不了解的话,请关注我第一篇Bmob文章 项目意义: 该项目实现简单,比较 ...

  6. Android实战——第三方服务之Bmob后端云的集成、用户登陆、用户注册、获取用户、用户注销(一)

    第三方服务之Bmob后端云的集成.用户登陆.用户注册.获取用户.用户注销(一) Bmob简介: 步骤一:Bmob集成 在www.bmob.cn注册一个用户,在网站后台创建一个应用,进去管理页面之后在设 ...

  7. Flutter插件一野狗云身份认证

    Flutter插件一野狗云身份认证 使用野狗身份认证(Wilddog Auth)的Flutter插件.野狗云身份认证即Auth,用于帮助企业和开发者将野狗快速接入应用的身份认证系统,一次身份认证打通野 ...

  8. 和后台如何对接_业务系统如何对接第三方服务?

    在产品工作中,我们时常要对接第三方服务.本文作者从过往的对接项目经历中,提炼的关于业务系统,如何对接第三方服务的方法论,希望能对你有所帮助. 随着公司业务的发展,我们有时会遇到,需要在自身业务系统中加 ...

  9. 分布式、微服务、云架构

    分布式.微服务.云架构 JAVA语言开发.跨平台.高性能.高可用.安全.服务化.模块化.組件化.驱动式开发模式 commonservice eureka Netflix 云端服务发现,一个基于 RES ...

最新文章

  1. 送书!送书!送书!重要的事情说三遍
  2. 中科院微生物所王军课题组特别研究助理招聘
  3. 50个linux指令,每天学一个 Linux 命令(50):date
  4. python中的matplotlib.pyplot_python matplotlib中axes与axis的区别?
  5. 原生php登录注册,原生php登陆注册
  6. java将HTML文件转化为pdf文件,如何使用Java将HTML网页转换为PDF文件
  7. iOS设计模式 - 享元
  8. composer升级_Composer 使用姿势与 Lumen 升级指南
  9. 矩阵求多元函数的通解_Hessian矩阵
  10. windows服务器安装nginx
  11. 正版python怎么下载_怎么下载官网python并安装
  12. php 实现联想式 搜索,php实现联想搜索,你会吗?_后端开发
  13. 57. mysqli 扩展库(4)
  14. JQuery AJAX 的表单提交
  15. 投资:螺纹钢研究框架
  16. 吉利车机安装第三方app教程,支持缤瑞、缤越、博越、博瑞ge、星越等
  17. SimpleFOC移植STM32(二)—— 开环控制
  18. 网站黑白色调之filter属性
  19. 微信扫描登录(生成二维码)
  20. C盘爆满的解决方案?很可能是因为这个Group2文件夹

热门文章

  1. php yii调试,yii框架中debug怎么用
  2. 等高布局、圣杯布局、双飞翼布局
  3. 音频编解码(PCM、G711A、G711U、AAC)理解
  4. 旅游景区开发小程序,有哪些使用场景?
  5. 万事皆有始亦有终---《The Matrix》影评之终结篇
  6. POJ1321DFS
  7. oracle 汉字替换空格,oracle中replace替换回车换行空格的方法详解
  8. android adb复制粘贴工具(九十)
  9. html七夕情人节表白示爱网站源码制作 (程序员表白代码大全)
  10. android studio之时间选择器和文本框操作