Ruby实时web推送方案Faye

Web实时推送技术介绍

  • WebSocket介绍

说到Web实时推送,不得不提到WebSocket。WebSocket是html5规范新引入的功能,用于解决浏览器与后台服务器双向通讯的问题,使用WebSocket技术,后台可以随时向前端推送消息,以保证前后台状态统一,在传统的无状态HTTP协议中,这是“无法做到”的。在WebSocke推出以前,服务端向客户端推送消息的方式都以曲线救国的轮询方式为主。

WebSocket是一种全新的协议,不属于http无状态协议,协议名为”ws”,这意味着一个websocket连接地址会是这样的写法:ws://twaver.com:8080/webSocketServer。ws不是http,所以传统的web服务器不一定支持,需要服务器与浏览器同时支持, WebSocket才能正常运行,目前的支持还不普遍,需要特别的web服务器和现代的浏览器。

当然WebSocket并不是唯一选择,还有一些其他的协议,这里主要介绍一下一个轻量级推送服务Faye

  • 轻量级推送服务Faye

Faye是以channel为基础,基于Bayeux协议的轻量级订阅、发布(subscribe/publish)服务,并且也是完全开源的。
官方向导支持目前较为流行的快速开发框架Node.js和Ruby on Rails。

使用thin作为服务器,在搭建完成后无需任何代码即可处理客户端的订阅(subscribe)和发布(publish)请求。服务器端提供现成的faye.js供Browser Client使用。

以Node.js为例,先启动服务端服务

//服务端代码
var http = require('http'),
    faye = require('faye');

var server = http.createServer(),
    bayeux = new faye.NodeAdapter({mount: '/'});

bayeux.attach(server);
server.listen(8000);

Web Client订阅名为/messages的channel,并在收到消息后弹出alert

var client = new Faye.Client('http://localhost:8000/');

client.subscribe('/messages', function(message) {
  alert('Got a message: ' + message.text);
});

Web Client向/messageschannel发布消息

client.publish('/messages', {
  text: 'Hello world'
});

所有订阅/messages的客户端就能收到Hello world的消息了,就是那么简单!

  • 国外现成的云推送服务

目前国外最流行的推送云服务是Pusher(网站因为奇怪的原因在国内无法访问)。Pusher是基于WebSocket协议的云服务。官网首页的图很好地说明了使用Pusher的应用架构:

用户的服务端(Your App)作为一个Server-Side Client发布消息到各个客户端。

服务非常好用,收费按最大连接数和每天消息总数的组合按月收费。免费套餐的最大20个连接数和每天一万条消息完全足够测试和小应用使用。但是GFW使国外服务和国内产生了信息不对称

  • 国内的云推送服务

当然国人看到了商机也提供了类似的服务,比较有名的是JPush和百度云推送。与国外服务的区别就是:国内的推送服务提供商只提供了移动平台的SDK,主要解决移动终端原先无法支持推送的问题,而Pusher和Faye主要提供Web上的推送。

另一个区别在收费模式上,国内的推送服务提供商主要以免费模式为主,结合了其他的服务推出富媒体推送,比如百度云推送,结合了百度轻应用。可由web管理界面生成一个轻应用后,直接将这个生成的页面推送到移动端。

  • Web推送的应用场景

在Web应用越来越前端化的趋势下(前端展现和计算由客户端浏览器执行js代码实现,后台服务只提供REST Api)。Web实时推送势必是将来技术发展的趋势,同时也一定有企业在推送上不愿意出更多的人力成本维护服务器,而使用云服务。

目前,举一些Web实时推送的一些服务应用场景。

  • 工具类云应用,比如远程工作、项目管理应用:风车tower
  • 各社区、论坛的新消息推送
  • 即时通讯应用,比如:WebQQ
  • 移动应用推送,例子点这里
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,442评论 19 139
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,742评论 0 15
  • 文/尘间红叶 01 清明节,天气阴。我一个人坐在医院的长椅上,看着进进出出的人。老的少的,穷的富的,俊的丑的,好像...
    尘间红叶阅读 3,746评论 3 6
  • C99中新增加了restrict修饰的指针:由restrict修饰的指针是最初唯一对指针所指向的对象进行存取的方法...
    kirai阅读 5,105评论 0 0
  • 想写一个,在西瑞安瀑布下微光沼泽被老乌托梦醒来后的牙口和宅熊,关于他们内心的不安,疑虑,以及为何直至旅程终点也没有...
    V匿匿阅读 3,038评论 0 0