sse实现php
SSE(Server-Sent Events)实现 PHP
SSE 是一种基于 HTTP 的服务器推送技术,允许服务器向客户端实时推送数据。以下是使用 PHP 实现 SSE 的详细方法:
客户端代码(HTML/JavaScript)
<!DOCTYPE html>
<html>
<head>
<title>SSE Demo</title>
</head>
<body>
<div id="result"></div>
<script>
const eventSource = new EventSource('sse.php');
eventSource.onmessage = function(e) {
document.getElementById('result').innerHTML += e.data + '<br>';
};
</script>
</body>
</html>
服务器端代码(PHP)
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
while (true) {
$data = [
'time' => date('H:i:s'),
'message' => 'Server time update'
];
echo "data: " . json_encode($data) . "\n\n";
ob_flush();
flush();
sleep(1);
}
?>
关键实现要点
设置正确的 HTTP 头是 SSE 工作的基础:
Content-Type: text/event-streamCache-Control: no-cacheConnection: keep-alive
数据格式必须遵循 SSE 规范:
- 每行以字段名开头,如
data: - 消息以双换行符
\n\n结束
高级功能实现
实现自定义事件类型:
echo "event: customEvent\n";
echo "data: {\"value\": \"custom data\"}\n\n";
设置重连时间:
echo "retry: 5000\n"; // 5秒后重连
注意事项
避免在循环中使用 exit 或 die,这会终止连接
考虑添加心跳机制防止连接超时
生产环境应添加适当的错误处理和日志记录
对于高并发场景,可能需要考虑使用专门的推送服务
安全性考虑
验证客户端来源防止跨站请求伪造 限制敏感数据的推送 考虑添加身份验证机制
性能优化
减少每次推送的数据量
适当调整推送频率
使用输出缓冲控制函数如 ob_flush() 和 flush()

通过以上方法,可以在 PHP 中有效实现 SSE 功能,为 Web 应用添加实时数据推送能力。






