在 PHP EventSource 中處理客戶端連接,您需要創建一個長輪詢服務器,以便在客戶端與服務器之間實時傳輸數據
eventsource.php
的 PHP 文件。這將是您的服務器端代碼:<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
// 在這里添加您的業務邏輯,例如從數據庫獲取數據或其他操作
$data = array(
'message' => 'Hello from server!',
'time' => date('Y-m-d H:i:s')
);
echo "data: " . json_encode($data) . "\n\n";
flush();
// 設置一個延遲,以便客戶端可以不斷地請求更新
sleep(5);
?>
index.html
,并添加以下內容:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>EventSource Example</title>
</head>
<body>
<ul id="event-log"></ul>
<script>
// 創建一個新的 EventSource 對象,指向您的 eventsource.php 文件
var eventSource = new EventSource("eventsource.php");
// 當服務器發送消息時觸發
eventSource.onmessage = function (event) {
var data = JSON.parse(event.data);
var listItem = document.createElement("li");
listItem.textContent = "Message: " + data.message + ", Time: " + data.time;
document.getElementById("event-log").appendChild(listItem);
};
// 當連接打開時觸發
eventSource.onopen = function () {
console.log("Connection opened.");
};
// 當連接關閉時觸發
eventSource.onerror = function (error) {
if (eventSource.readyState === EventSource.CLOSED) {
console.log("Connection closed.");
} else {
console.log("Error occurred:", error);
}
};
</script>
</body>
</html>
index.html
文件。您應該會看到來自服務器的實時消息。注意:如果您在本地運行此示例,請確保您的 Web 服務器支持 PHP。如果您使用的是諸如 XAMPP 之類的本地服務器解決方案,那么您應該已經具備所需的一切。如果您在線托管此示例,請確保您的托管提供商支持 PHP。