HTML5 伺服器傳送事件
HTML5 伺服器傳送的事件允許網頁自動從 Web 伺服器獲取資訊。
什麼是伺服器傳送的事件
HTML5 伺服器傳送事件是網頁與 Web 伺服器通訊的新方式。XMLHttpRequest 物件也可以讓你的 JavaScript 程式碼向 Web 伺服器發出請求。但它是一對一的交換 - 這意味著一旦 Web 伺服器提供其響應,通訊就結束了。
但是,在某些情況下,網頁需要與 Web 伺服器建立長期連線。一個典型的例子是金融網站上的股票報價,其中價格自動更新。另一個例子是在各種媒體網站上執行的新聞自動收報機。
你可以使用 HTML5 伺服器傳送的事件功能建立此類效果。它允許網頁保持與 Web 伺服器的開放連線,以便 Web 伺服器可以隨時自動傳送新響應,並且無需重新連線,並且一遍又一遍地從頭開始執行相同的伺服器指令碼。
提示: 除了 Internet Explorer 之外,所有主要的現代瀏覽器(如 Firefox,Chrome,Safari 和 Opera)都支援 HTML5 的伺服器傳送事件功能。
使用伺服器指令碼傳送訊息
讓我們建立一個名為’server_time.php’的 PHP 檔案,並在其中鍵入以下指令碼。它將定期報告 Web 伺服器內建時鐘的當前時間。稍後我們將收到此時間並相應地更新網頁。
<?php
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
// Get the current time on server
$currentTime = date("h:i:s", time());
// Send it in a message
echo "data: " . $currentTime . "\n\n";
flush();
?>
PHP 指令碼的前兩行設定了兩個重要的標題。首先,它將 MIME 型別設定為 text/event-stream
,這是伺服器端事件標準所必需的。第二行告訴 Web 伺服器關閉快取,否則可能會快取指令碼的輸出。
通過 HTML5 伺服器傳送的事件傳送的每條訊息都必須以文字 data:
開頭,後跟實際的訊息文字和新的行字元序列(\n\n
)。
最後,我們使用 PHP flush()
函式確保資料立即傳送,而不是緩衝直到 PHP 程式碼完成。
處理網頁中的訊息
EventSource
物件用於接收伺服器傳送的事件訊息。讓我們建立一個名為’demo_sse.html’的 HTML 文件,並將其放在’server_time.php’檔案所在的同一專案目錄中。此 HTML 文件只接收 Web 伺服器報告的當前時間並將其顯示給使用者。
<!DOCTYPE html>
<html lang="en">
<head>
<title>HTML5 Server-Sent Events</title>
<script type="text/javascript">
window.onload = function(){
var source = new EventSource("server_time.php");
source.onmessage = function(event){
document.getElementById("result").innerHTML += "New time received from web server: " + event.data + "<br>";
};
};
</script>
</head>
<body>
<div id="result">
<!--Server response will be inserted here-->
</div>
</body>
</html>