HTML SSE API
伺服器傳送事件 (SSE) 允許網頁從伺服器接收更新。
伺服器傳送事件 - 單向訊息傳遞
伺服器傳送事件是指網頁自動接收來自伺服器的更新。
以前也可以做到這一點,但網頁必須詢問是否有任何可用更新。有了伺服器傳送事件,更新會自動到來。
示例:Facebook/Twitter 更新、股票價格更新、新聞推送、體育比分等。
瀏覽器支援
表中的數字指定了完全支援伺服器傳送事件的第一個瀏覽器版本。
API | |||||
---|---|---|---|---|---|
SSE | 6.0 | 79.0 | 6.0 | 5.0 | 11.5 |
接收伺服器傳送事件通知
EventSource 物件用於接收伺服器傳送事件通知
示例
var source = new EventSource("demo_sse.php");
source.onmessage = function(event) {
document.getElementById("result").innerHTML += event.data + "<br>";
};
自己動手試一試 »
示例說明
- 建立一個新的 EventSource 物件,並指定傳送更新的頁面的 URL(在本例中為“demo_sse.php”)
- 每次收到更新時,都會發生 onmessage 事件
- 當 onmessage 事件發生時,將收到的資料放入 id="result" 的元素中
檢查伺服器傳送事件支援
在上面的 tryit 示例中,有一些額外的程式碼來檢查瀏覽器對伺服器傳送事件的支援
if(typeof(EventSource) !== "undefined") {
// 是的!支援伺服器傳送事件!
// 一些程式碼.....
} else {
// 對不起!不支援伺服器傳送事件..
}
伺服器端程式碼示例
為了讓上面的示例正常工作,您需要一個能夠傳送資料更新的伺服器(如 PHP 或 ASP)。
伺服器端事件流語法很簡單。將“Content-Type”標頭設定為“text/event-stream”。現在您可以開始傳送事件流。
PHP 程式碼(demo_sse.php)
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$time = date('r');
echo "data: The server time is: {$time}\n\n";
flush();
?>
ASP 程式碼(VB)(demo_sse.asp)
<%
Response.ContentType = "text/event-stream"
Response.Expires = -1
Response.Write("data: The server time is: " & now())
Response.Flush()
%>
程式碼說明
- 將“Content-Type”標頭設定為“text/event-stream”
- 指定頁面不應快取
- 輸出要傳送的資料(始終以“data: ”開頭)
- 將輸出資料重新整理回網頁
EventSource 物件
在上面的示例中,我們使用 onmessage 事件來獲取訊息。但其他事件也可用
活動 | 描述 |
---|---|
onopen | 當與伺服器的連線開啟時 |
onmessage | 收到訊息時 |
onerror | 發生錯誤時 |