php 实现sse
PHP 实现 SSE(Server-Sent Events)
SSE(Server-Sent Events)是一种允许服务器向客户端推送实时数据的协议。以下是使用 PHP 实现 SSE 的详细方法:
设置 HTTP 头部
确保服务器发送正确的 HTTP 头部以启用 SSE。需要在 PHP 脚本中设置以下头部:
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
发送事件数据
SSE 数据格式要求每条消息以 data: 开头,并以双换行符 \n\n 结束。例如:
echo "data: This is a message\n\n";
flush();
示例代码
以下是一个完整的 PHP SSE 实现示例,每秒推送一次时间戳:
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
while (true) {
$currentTime = date('Y-m-d H:i:s');
echo "data: The server time is: {$currentTime}\n\n";
flush();
// 暂停 1 秒
sleep(1);
}
?>
客户端连接
客户端可以使用 JavaScript 的 EventSource API 连接到 SSE 服务:
const eventSource = new EventSource('sse.php');
eventSource.onmessage = function(e) {
console.log(e.data);
};
注意事项
- 确保 PHP 脚本不会超时,可以在脚本开始时设置
set_time_limit(0)。 - 避免在循环中频繁输出大量数据,可能导致服务器负载过高。
- 如果需要终止连接,服务器可以发送一个特殊事件(如
event: end),客户端监听后关闭连接。
高级用法
可以发送自定义事件类型,客户端可以监听特定事件:
echo "event: customEvent\ndata: Custom data\n\n";
flush();
客户端监听自定义事件:

eventSource.addEventListener('customEvent', function(e) {
console.log(e.data);
});
通过以上方法,可以轻松实现 PHP 的 SSE 功能,适用于实时通知、日志推送等场景。






