📅  最后修改于: 2023-12-03 15:33:38.460000             🧑  作者: Mango
在现代 Web 应用程序中,服务器与客户端之间的实时通信变得越来越重要。其中一种实现实时通信方法是使用服务器发送事件(Server-Sent Events,SSE),它允许服务器向客户端发送事件流,这些事件作为消息推送到 Web 浏览器。
在 PHP 中,可以使用 stream_set_blocking
函数与 stream_socket_accept
函数实现 SSE。
以下是一个简单的 PHP 实现服务器发送事件的示例:
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
while (true) {
// 生成一些用于事件的数据
$data = json_encode(array(
'time' => date('r'),
'message' => 'Hello, world!'
));
// 返回事件消息
echo "event: message\n";
echo "data: {$data}\n\n";
// 刷新输出缓冲区,确保立即将事件消息发送到客户端
ob_flush();
flush();
// 等待 1 秒钟,然后重复
sleep(1);
}
以上代码将在无限循环中生成一些事件数据,并将其发送到客户端。注意,我们使用了 HTTP 响应头来指定返回的数据类型和缓存控制。
要在客户端接收此事件流,可以使用 JavaScript 的 EventSource
对象。
以下是一个接收 SSE 数据的客户端示例:
var eventSource = new EventSource('/sse.php');
eventSource.addEventListener('message', function(event) {
var data = JSON.parse(event.data);
console.log(data.time + ": " + data.message);
});
客户端代码会创建一个新的 EventSource
对象,然后侦听 message
事件并将事件数据解析为 JSON 对象。
以上就是 PHP 中实现服务器发送事件的简单示例。它可以让开发人员实现即时通信,而不必使用复杂的 WebSocket 协议。