head-img Sihan's Blog

php sse模式发送Demo

PHP

这段PHP代码的功能是实现一个基于Server-Sent Events协议的简单定时器。 首先,通过header函数发送三个HTTP头信息: Content-Type: text/event-stream 用于告知浏览器以事件流的形式进行响应,这样浏览器会保持连接并等待服务器发送数据。 Cache-Control: no-cache 用于告知浏览器不进行缓存,确保每次请求都获取最新的数据。 X-Accel-Buffering: no 是一个特定于Nginx服务器的头信息,用于禁用内部缓冲,使得数据能够立即发送到客户端。 然后,使用set_time_limit(0)函数设置脚本的执行时间限制为0,即没有时间限制,防止脚本因超时而中断。 接着,使用ob_end_clean()函数清除输出缓冲区,并禁用输出缓冲,确保数据能够立即发送到客户端。 使用ob_implicit_flush()函数启用自动刷新,使得脚本输出的内容立即发送到客户端,而不是等待缓冲区填满。 进入一个for循环,循环5次,每次循环调用sleep(2)函数暂停2秒钟,然后使用echo函数输出当前时间,并在末尾添加一个换行符\n,以满足事件流数据格式的要求。 循环结束后,再次调用sleep(2)函数暂停2秒钟,然后输出字符串’结束’,最后使用exit函数终止脚本的执行。 总体来说,这段代码通过发送Server-Sent Events数据给浏览器,实现了向客户端发送实时更新的时间信息,并在最后发送结束信号

<?php
        header('Content-Type: text/event-stream'); // 以事件流的形式告知浏览器进行显示
        header('Cache-Control: no-cache');         // 告知浏览器不进行缓存
        header('X-Accel-Buffering: no');

        set_time_limit(0);
        ob_end_clean();
        ob_implicit_flush();
        for ($i = 0; $i < 5; $i++) {
            sleep(2);
            echo "data:" . json_encode([time()]) . "\n\n";
        }

        sleep(2);
        echo '结束';
        exit;
PHPsse
打赏本文
二维码