在下面的示例中,客戶端指的是瀏覽器,服務(wù)器指的是網(wǎng)站服務(wù)器主機(jī)。
為了更好的理解這些知識(shí)點(diǎn),你應(yīng)該簡(jiǎn)單了解典型的http網(wǎng)站是如何工作的。
普通的http:
- 客戶端從服務(wù)器端請(qǐng)求網(wǎng)頁(yè)
- 服務(wù)器作出相應(yīng)的反應(yīng)
- 服務(wù)器返回相應(yīng)到客戶端
AJAX Polling:
- 客戶端使用普通的http方式向服務(wù)器端請(qǐng)求網(wǎng)頁(yè)
- 客戶端執(zhí)行網(wǎng)頁(yè)中的JavaScript輪詢腳本,定期循環(huán)的向服務(wù)器發(fā)送請(qǐng)求(例如每5秒發(fā)送一次請(qǐng)求),獲取信息
- 服務(wù)器對(duì)每次請(qǐng)求作出響應(yīng),并返回相應(yīng)信息,就像正常的http請(qǐng)求一樣
AJAX Long-Polling:
- 客戶端使用普通的http方式向服務(wù)器端請(qǐng)求網(wǎng)頁(yè)
- 客戶端執(zhí)行網(wǎng)頁(yè)中的JavaScript腳本,向服務(wù)器發(fā)送數(shù)據(jù)、請(qǐng)求信息
- 服務(wù)器并不是立即就對(duì)客戶端的請(qǐng)求作出響應(yīng),而是等待有效的更新
- 當(dāng)信息是有效的更新時(shí),服務(wù)器才會(huì)把數(shù)據(jù)推送給客戶端
- 當(dāng)客戶端接收到服務(wù)器的通知時(shí),立即會(huì)發(fā)送一個(gè)新的請(qǐng)求,進(jìn)入到下一次的輪詢
HTML5 Server Sent Events (SSE) / EventSource:
- 客戶端使用普通的http方式向服務(wù)器端請(qǐng)求網(wǎng)頁(yè)
- 客戶端執(zhí)行網(wǎng)頁(yè)中的JavaScript腳本,與服務(wù)器之間建立了一個(gè)連接
- 當(dāng)服務(wù)器端有有效的更新時(shí),會(huì)發(fā)送一個(gè)事件到客戶端
- 服務(wù)器到客戶端數(shù)據(jù)的實(shí)時(shí)推送,大多數(shù)內(nèi)容是你需要的
- 你需要一臺(tái)可以做Event Loop的服務(wù)器
- 不允許跨域的連接
- 如果你覺(jué)得這些還不夠,想要了解更多,可以參考下面的文件和手冊(cè)
- Using server-sent events
- https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events
- Server-Sent Events
- http://html5doctor.com/server-sent-events
- Stream Updates with Server-Sent Events
- http://www.html5rocks.com/en/tutorials/eventsource/basics/
- Tutorial: JSF 2 and HTML5 Server Sent Events
- http://jaxenter.com/tutorial-jsf-2-and-html5-server-sent-events-42932.html
HTML5 Websockets:
- 客戶端使用普通的http方式向服務(wù)器端請(qǐng)求網(wǎng)頁(yè)
- 客戶端執(zhí)行網(wǎng)頁(yè)中的JavaScript腳本,與服務(wù)器之間建立了一個(gè)連接
- 服務(wù)器和客戶端之間,可以雙向的發(fā)送有效數(shù)據(jù)到對(duì)方
- 服務(wù)器可以實(shí)時(shí)的發(fā)送數(shù)據(jù)到客戶端,同時(shí)客戶端也可以實(shí)時(shí)的發(fā)送數(shù)據(jù)到服務(wù)器
- 你需要一臺(tái)可以做Event Loop的服務(wù)器
- 使用 WebSockets 允許跨域的建立連接
- 它同樣支持第三方的websocket主機(jī)服務(wù)器,例如Pusher或者其它。這樣你只需要關(guān)心客戶端的實(shí)現(xiàn) ,降低了開(kāi)發(fā)難度。
- 如果你覺(jué)得這些還不夠,想要了解更多,可以參考下面的文件和手冊(cè)
- An Introduction To WebSockets
- http://www.developerfusion.com/article/143158/an-introduction-to-websockets/
- Writing WebSocket client applications
- https://developer.mozilla.org/en-US/docs/WebSockets/Writing_WebSocket_client_applications
- Start Using HTML5 WebSockets Today
- http://code.tutsplus.com/tutorials/start-using-html5-websockets-today--net-13270
WebRTC:
WebRTC是一種點(diǎn)對(duì)點(diǎn)類型的傳輸方式,它支持多種傳輸協(xié)議,如:UDP、TCP甚至是抽象層的協(xié)議。設(shè)計(jì)它時(shí)同時(shí)考慮到了允許使用可靠和不可靠的兩種方式傳輸數(shù)據(jù)。這種技術(shù)一般應(yīng)用在傳輸數(shù)據(jù)量較大的內(nèi)容,比如音、視頻等流媒體的傳輸。
Comet:
Comet是一種用于web的推送技術(shù),能使服務(wù)器實(shí)時(shí)地將更新的信息傳送到客戶端,而無(wú)須客戶端發(fā)出請(qǐng)求,目前有兩種實(shí)現(xiàn)方式,長(zhǎng)輪詢和iframe流。如果你想了解更多,可以參考維基百科或者IBM
- Event Loop
- Event Loop是一個(gè)程序結(jié)構(gòu),用于等待和發(fā)送消息和事件。
- 長(zhǎng)輪詢
- 長(zhǎng)輪詢是在打開(kāi)一條連接以后保持,等待服務(wù)器推送來(lái)數(shù)據(jù)再關(guān)閉的方式。
- iframe流
iframe流方式是在頁(yè)面中插入一個(gè)隱藏的iframe,利用其src屬性在服務(wù)器和客戶端之間創(chuàng)建一條長(zhǎng)鏈接,服務(wù)器向iframe傳輸數(shù)據(jù)(通常是HTML,內(nèi)有負(fù)責(zé)插入信息的javascript),來(lái)實(shí)時(shí)更新頁(yè)面。
iframe流方式的優(yōu)點(diǎn)是瀏覽器兼容好,Google公司在一些產(chǎn)品中使用了iframe流,如Google Talk。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。