HTML5是一系列标准,目标是让web page变成web app。在web page时代浏览器不具有也不需要具有实时连接的能力。但网页应用不同,不论是网页游戏,实时IM,实时地理位置,实时数据监控都需要实时性。现有的Web架构其实并不具备实时的能力。因为现有的Web架构基于Http协议,而HTTP协议是基于请求响应的,天然与实时八字不合。所以需要有新的架构来满足实时化web的需求。 Wilddog的优势是强大的实时数据同步,支持多端,离线可用。 其中客户端(浏览器)引入Wilddog SDK,与Wilddog 云端实时同步。用户已有的服务端与Wilddog云端通过RESTFul接口通信。这个架构适应的场景有:
其中用到的Wilddog特性有:
WebSocket 长连接在Wilddog客户但与Wilddog云端直接主要使用WebSocket作为传输协议。WebSocket协议是HTML5众多协议里的一个,其作用是建立客户端与服务端的长连接。其实在WebSocket之前 伟大的程序员们就进行了各种实时化的尝试,比如:
Ajax long polling 其实就可以实现真正的实时了,那么WebSocket的优势在哪里?答案就是性能的提升。WebSocket相对Ajax long polling性能的提升不止一点点。原因是WebSocket的传输其实并不依赖于HTTP协议,而且不需要重复建立TCP连接。WebSocket只使用HTTP协议作为握手协议,当长连接建立之后就再也不需要传输庞大的HTTP头了。WebSocket协议头基于二进制,非常小,跟HTTP协议头相比可以忽略不计。对比如图: Wilddog主要使用WebSocket进行数据传输,在不支持的场景下退化为long polling。 数据存储和实时同步WebSocket是个优秀的协议。但不能直接用于生产,因为你会面临以下问题:
协议提供的API一般都是最小可用的,而开发者希望拿到的API是好用的!所以需要有第三方的库来封装。幸运的是有一些库是比较好的,其中有代表性的是Socket.io。Socket.io解决了浏览器兼容性问题,提供了会话层,同时有基于Node.js的服务端逻辑。 用户可以用Socket.io来写一些实时应用,不过仍然有部分问题没有解决:
Wilddog恰好的解决了这些问题,因为有数据存储,所以不需要关注对方的连接状态,只需要修改相应位置的数据就可以,数据同步可以让应用离线可用,而且离线与在线可以共用一套逻辑。关于Wilddog的数据存储和同步机制可以写的东西太多,打算另外单独写一篇介绍。 简单说下结论,同步架构带来的好处是:
同步意味着需要有本地存储和云端存储。Wilddog的数据存储格式是基于JSON的,类似MongoDB等NoSQL数据库。JSON的好处是天然与JS语言兼容,前端友好。 比如这段数据:
RESTFul接口与SSEWilddog数据是可以通过服务端访问的。Wilddog数据库中的数据结构不支持数组,原因是要做到RESTful,数据库中的任何一条数据都能够通过url直接访问到。服务端可以通过HTTP协议访问Wilddog数据库中的所有数据。 假如上面的一段数据存在存在https://YOUR-APP-ID.wilddogio.com/users位置 那么通过HTTP请求
你将得到
你还可以通过POST,PUT,DELETE,PATCH对数据进行修改。而且还支持SSE,与你的服务端实时数据同步。有一件事情需要注意Wilddog 存储中并没有数组,因为数组是无法通过RESTFul接口来直接访问的,Wilddog数据库设计的原则之一就是所有的数据都能通过RESTFul接口直接访问。那么数组的需求如何处理? 其实非常简单,用对象来代替!
通过RESTFul的HTTP协议,你的服务端可以方便的对数据做修改和查询,十分方便。Wilddog还支持另外一种基于HTTP实时协议--SSE。你的服务端可以订阅一部分数据,这部分数据的所有变化都通过SSE推送给你。 到此为止,这个架构中的所有数据都可以打通了,剩下的都是用户认证与权限的打通了。 基于JWT的认证机制和基于表达式的授权机制Wilddog可以方便的集成到已有的系统中,不只因为其支持RESTFul的数据访问和SSE。其权限机制的集成更加简单。 不论RESTful或SDK的数据同步都是自由的,用户可以自由的访问任何数据。然而在实际中,自由访问所有的数据显然是不允许的。Wilddog的权限控制分两部分,第一部分是用户认证,也就是用户登录。 先说Wilddog的用户认证,用户认证的目标是给一个正在访问的客户端一个身份,并且要保证这个身份可信。针对不同的场景,Wilddog提供这些认证方式。
今天的主题是在一个已有的系统中加入Wilddog。我们默认这个已有的系统已经存在用户系统了,开发者一定希望使用已有系统中的用户ID来访问Wilddog的数据库。那么可以使用第三方账号登录。 Wilddog的第三方账号登录的方式本质是JWT。这种方式的优点是Wilddog和已有的服务端可以互不访问就建立信任关系。先科普一下JWT的原理: 作者:jackxy来源:http://blog.jackxy.com/wilddogshi-shi-yao-gui/ 推荐阅读↓ |