head-img Force'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;
点我评论
打赏本文
二维码


仅有一条评论


  1. jiyouzhan
    jiyouzhan 05月15日

    这篇文章写得深入浅出,让我这个小白也看懂了!

    回复

134

文章

14

标签

 访客统计  Update-0927-16:05

 网站信息