了解最新公司動(dòng)態(tài)及行業(yè)資訊
這種方法接近實(shí)時(shí),但不是真正的實(shí)時(shí)。(當(dāng)然,一些外部因素總是失控的,比如網(wǎng)絡(luò)延遲,任何方法都會(huì)出現(xiàn)。)
3. 流式傳輸
流通道( )與長(zhǎng)輪詢大致相同,只是服務(wù)器不關(guān)閉響應(yīng)流。相反,它故意保持打開狀態(tài),讓瀏覽器認(rèn)為更多數(shù)據(jù)即將到來(lái)。但是,流通道也有其自身的缺點(diǎn):
最大的問(wèn)題是數(shù)據(jù)刷新()。
如果發(fā)現(xiàn)套接字將長(zhǎng)時(shí)間打開,某些瀏覽器實(shí)現(xiàn)可能會(huì)自行決定關(guān)閉套接字。在這種情況下,需要重新建立通道。
通常,第一個(gè)問(wèn)題是通過(guò)將垃圾負(fù)載附加到每個(gè)流響應(yīng)來(lái)解決的,這樣響應(yīng)數(shù)據(jù)就足以填滿緩沖區(qū)。第二個(gè)問(wèn)題可能會(huì)誘使瀏覽器認(rèn)為數(shù)據(jù)以較慢的速度進(jìn)入,并定期顯示“保持活動(dòng)”或“同步”消息。
以下是實(shí)現(xiàn)推送的一些常用技術(shù)。
1. 彗星
Comet 有時(shí)也稱為反向 Ajax 或服務(wù)器端推送(-side push)。這個(gè)想法很簡(jiǎn)單:將數(shù)據(jù)直接從服務(wù)器推送到瀏覽器,而不是等待瀏覽器請(qǐng)求它。這聽起來(lái)很簡(jiǎn)單服務(wù)器運(yùn)維技術(shù),但是如果您熟悉 Web 應(yīng)用程序,尤其是 HTTP 協(xié)議,那么您就會(huì)知道它絕非簡(jiǎn)單。實(shí)現(xiàn) Comet 風(fēng)格的 Web 應(yīng)用程序同時(shí)保持跨瀏覽器和服務(wù)器的可伸縮性僅在最近幾年才成為可能。
因?yàn)?,要使?Comet,您需要做兩件主要的事情。首先,需要對(duì)配置文件 .xml 稍作修改。默認(rèn)啟用更典型的同步 IO 連接器?,F(xiàn)在只需將其切換到異步版本,如下所示。
然后,創(chuàng)建一個(gè)實(shí)現(xiàn) org... 接口的接口。該接口需要實(shí)現(xiàn)事件方法。這是 Comet 交互的生命周期方法。將使用不同的實(shí)例調(diào)用。通過(guò)檢查,可以確定處于生命周期的哪個(gè)階段。BEGIN事件發(fā)生在請(qǐng)求第一次進(jìn)來(lái)的時(shí)候。READ 事件表示正在發(fā)送數(shù)據(jù),并且僅在請(qǐng)求為 POST 時(shí)才需要。當(dāng)遇到 END 或 ERROR 事件時(shí),請(qǐng)求將終止。
具體例子可以參考這個(gè)地址。
常用的 Comet 框架有:
: 是一個(gè) Dojo 項(xiàng)目,提供 Java、perl 和其他語(yǔ)言的實(shí)現(xiàn)。該站點(diǎn)還提供由 Sun、IBM 和 BEA 等公司實(shí)施的 Comet 產(chǎn)品的鏈接。
2. HTML5
HTML5 提供了兩種符合 W3C 的推送方法:SSE 和 Web。
我們先介紹SSE(-sent-),以PHP服務(wù)器為例,
客戶訪問(wèn)的頁(yè)面是
sse.htm
服務(wù)器端推送消息的腳本是
.php
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
mysql_connect("localhost", "user", "pass");
mysql_select_db("eventstream");
$q = mysql_query("select textnotif from notification where read='0'");
$r = mysql_fetch_array($q);
$notif = $r[textnotif];
if($notif != ""){
echo "data: ".$notif.PHP_EOL;
}
SSE 實(shí)現(xiàn)了從服務(wù)器向客戶端單向推送消息的功能。目前所有瀏覽器都可以支持。對(duì)于支持的特定瀏覽器,您可以單擊此處。
WEB提供雙向消息通道。它經(jīng)過(guò) HTTP 協(xié)議的初始握手階段服務(wù)器運(yùn)維技術(shù),然后升級(jí)到 Web 協(xié)議以支持實(shí)時(shí)數(shù)據(jù)通信。該協(xié)議旨在更輕量級(jí)。
這是一個(gè)使用該技術(shù)的示例的參考。目前,互聯(lián)網(wǎng)上的內(nèi)容仍然很多。
由于雙向通信的優(yōu)勢(shì),可用于聊天室、游戲、股票交易等需要雙向通信的應(yīng)用。SSE雖然只能實(shí)現(xiàn)從服務(wù)端到客戶端的單向推送,但是可以自動(dòng)重鏈接等優(yōu)點(diǎn),所以也很有用。
另一個(gè)可以作為參考的輕量級(jí)服務(wù)器推送框架是它提供了從HTTP Push到DHTML,以及該框架的具體實(shí)現(xiàn)示例。
參考:
1.使用 Java 實(shí)現(xiàn) Comet 風(fēng)格的 Web 應(yīng)用程序
2.應(yīng)用HTML5實(shí)現(xiàn)數(shù)據(jù)交換
3.
24小時(shí)免費(fèi)咨詢
請(qǐng)輸入您的聯(lián)系電話,座機(jī)請(qǐng)加區(qū)號(hào)