EventSource 是 HTML5 提供的一種服務器推送技術,它可以讓服務器發送數據到客戶端,而客戶端不需要發出請求。相較于輪詢方式,使用 EventSource 可以更及時地推送數據到客戶端,避免浪費不必要的請求。
使用 EventSource 需要在客戶端使用 JavaScript 創建 EventSource 對象,并指定要接收推送的服務器地址,如下所示:
var source = new EventSource('push.php'); source.onmessage = function(event) { // 接收到服務器推送的消息 };
在服務端,需要使用 PHP 進行推送,在客戶端通常設置 EventSource 指向一個 PHP 文件,而在該 PHP 中處理推送信息,這里舉例一個簡單的代碼:
header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); $data = 'some data'; echo 'data: ' . $data . "\n\n"; flush();
在該 PHP 文件中,首先需要設置響應頭的 Content-Type 為 text/event-stream,以及 Cache-Control 為 no-cache,從而確保服務器在推送數據時不會緩存。
然后,在 PHP 文件中,可以像普通的輸出一樣輸出數據,需要使用 "data:" 前綴,在輸出數據后加上兩個換行符,以告知客戶端一次推送的結束。最后使用 flush() 函數來確保所有數據被成功推送到客戶端。
在客戶端,當接收到服務器推送的數據時,就會執行相應的 onmessage 方法,可使用 event.data 獲取數據內容,如下所示:
source.onmessage = function(event) { var data = event.data; // 處理服務器推送的數據 };
需要注意的是,使用 EventSource 時,服務器必須保持連接打開,這可能導致服務器的負載增加。因此在實際應用中,需要根據具體情況進行權衡。