Web實(shí)時(shí)推送技術(shù)介紹
- WebSocket介紹
說(shuō)到Web實(shí)時(shí)推送,不得不提到WebSocket半醉。WebSocket是html5規(guī)范新引入的功能疚俱,用于解決瀏覽器與后臺(tái)服務(wù)器雙向通訊的問(wèn)題,使用WebSocket技術(shù)缩多,后臺(tái)可以隨時(shí)向前端推送消息呆奕,以保證前后臺(tái)狀態(tài)統(tǒng)一,在傳統(tǒng)的無(wú)狀態(tài)HTTP協(xié)議中衬吆,這是“無(wú)法做到”的梁钾。在WebSocke推出以前,服務(wù)端向客戶端推送消息的方式都以曲線救國(guó)的輪詢方式為主逊抡。
WebSocket是一種全新的協(xié)議姆泻,不屬于http無(wú)狀態(tài)協(xié)議,協(xié)議名為”ws”冒嫡,這意味著一個(gè)websocket連接地址會(huì)是這樣的寫(xiě)法:ws://twaver.com:8080/webSocketServer
拇勃。ws不是http,所以傳統(tǒng)的web服務(wù)器不一定支持孝凌,需要服務(wù)器與瀏覽器同時(shí)支持方咆, WebSocket才能正常運(yùn)行,目前的支持還不普遍胎许,需要特別的web服務(wù)器和現(xiàn)代的瀏覽器。
當(dāng)然WebSocket并不是唯一選擇,還有一些其他的協(xié)議伶棒,這里主要介紹一下一個(gè)輕量級(jí)推送服務(wù)Faye
- 輕量級(jí)推送服務(wù)Faye
Faye是以channel為基礎(chǔ)吊趾,基于Bayeux協(xié)議的輕量級(jí)訂閱、發(fā)布(subscribe/publish)服務(wù)穆碎,并且也是完全開(kāi)源的牙勘。
官方向?qū)еС帜壳拜^為流行的快速開(kāi)發(fā)框架Node.js和Ruby on Rails所禀。
使用thin作為服務(wù)器方面,在搭建完成后無(wú)需任何代碼即可處理客戶端的訂閱(subscribe)和發(fā)布(publish)請(qǐng)求。服務(wù)器端提供現(xiàn)成的faye.js
供Browser Client使用色徘。
以Node.js為例恭金,先啟動(dòng)服務(wù)端服務(wù)
//服務(wù)端代碼
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向/messages
channel發(fā)布消息
client.publish('/messages', {
text: 'Hello world'
});
所有訂閱/messages
的客戶端就能收到Hello world
的消息了褂策,就是那么簡(jiǎn)單横腿!
- 國(guó)外現(xiàn)成的云推送服務(wù)
目前國(guó)外最流行的推送云服務(wù)是Pusher(網(wǎng)站因?yàn)槠婀值脑蛟趪?guó)內(nèi)無(wú)法訪問(wèn))。Pusher是基于WebSocket協(xié)議的云服務(wù)斤寂。官網(wǎng)首頁(yè)的圖很好地說(shuō)明了使用Pusher的應(yīng)用架構(gòu):
用戶的服務(wù)端(Your App)作為一個(gè)Server-Side Client發(fā)布消息到各個(gè)客戶端耿焊。
服務(wù)非常好用,收費(fèi)按最大連接數(shù)和每天消息總數(shù)的組合按月收費(fèi)遍搞。免費(fèi)套餐的最大20個(gè)連接數(shù)和每天一萬(wàn)條消息完全足夠測(cè)試和小應(yīng)用使用罗侯。但是GFW使國(guó)外服務(wù)和國(guó)內(nèi)產(chǎn)生了信息不對(duì)稱。
- 國(guó)內(nèi)的云推送服務(wù)
當(dāng)然國(guó)人看到了商機(jī)也提供了類似的服務(wù)溪猿,比較有名的是JPush和百度云推送钩杰。與國(guó)外服務(wù)的區(qū)別就是:國(guó)內(nèi)的推送服務(wù)提供商只提供了移動(dòng)平臺(tái)的SDK,主要解決移動(dòng)終端原先無(wú)法支持推送的問(wèn)題诊县,而Pusher和Faye主要提供Web上的推送榜苫。
另一個(gè)區(qū)別在收費(fèi)模式上,國(guó)內(nèi)的推送服務(wù)提供商主要以免費(fèi)模式為主翎冲,結(jié)合了其他的服務(wù)推出富媒體推送垂睬,比如百度云推送,結(jié)合了百度輕應(yīng)用抗悍【越龋可由web管理界面生成一個(gè)輕應(yīng)用后,直接將這個(gè)生成的頁(yè)面推送到移動(dòng)端缴渊。
- Web推送的應(yīng)用場(chǎng)景
在Web應(yīng)用越來(lái)越前端化的趨勢(shì)下(前端展現(xiàn)和計(jì)算由客戶端瀏覽器執(zhí)行js代碼實(shí)現(xiàn)赏壹,后臺(tái)服務(wù)只提供REST Api)。Web實(shí)時(shí)推送勢(shì)必是將來(lái)技術(shù)發(fā)展的趨勢(shì)衔沼,同時(shí)也一定有企業(yè)在推送上不愿意出更多的人力成本維護(hù)服務(wù)器蝌借,而使用云服務(wù)昔瞧。
目前,舉一些Web實(shí)時(shí)推送的一些服務(wù)應(yīng)用場(chǎng)景菩佑。