📜  php 服务器发送事件 - PHP (1)

📅  最后修改于: 2023-12-03 15:33:38.460000             🧑  作者: Mango

PHP 服务器发送事件

在现代 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 协议。