安装PHP和SSE扩展
确保服务器上有PHP和SSE扩展:
sudo apt-get update sudo apt-get install php7.3 sudo apt-get install php7.3-sqlite3 sudo pecl install event sudo pecl install event-1. sudo systemctl restart php7.3-fpm
创建SSE服务器脚本
example_sse.php:
<?php
// 初始化SSE
ini_set('output_handler', 'php://temp');
ini_set('default_stream_wrapper', 'php://temp');
ini_set('track_errors', 'On');
ini_set('implicit_flush', 'On');
ini_set('flush_on_error', 'Off');
// 初始化事件
$event = event_init();
// 处理连接
event_set_callback($event, function ($fd) {
echo "新连接,ID: $fd\n";
event_add($fd, EVENT_READ | EVENT_WRITE);
});
// 读取数据
while (true) {
$data = trim($input);
if ($data) {
echo "收到数据:$data\n";
event_push($fd, "服务器发送消息:$data");
}
// 定期发送心跳
if (time() - start_time > 30) {
event_data($fd, 'pong');
start_time = time();
}
// 刷新
flush();
}
测试SSE服务器
使用HTML文件和JavaScript客户端:
example.html:
<!DOCTYPE html>
<html>
<head>SSE测试</title>
</head>
<body>
<div id="output"></div>
<script>
const eventSource = new EventSource('example_sse.php');
eventSource.onmessage = function(e) {
document.getElementById('output').innerHTML += '<p>收到消息:' + e.data + '</p>';
};
</script>
</body>
</html>
运行测试
php example_sse.php
打开浏览器访问 http://localhost/example_sse.php,你应该看到连接日志和消息。
故障排除
- 权限问题:确保PHP有足够权限监听端口。
- 配置错误:检查
php.ini,确认extension=event.so加载。 - PHP版本:确保使用PHP7.3及以上版本。
优化与生产部署
- 性能优化:使用
event_set_peek(),event_set_flush(), 和event_set_defrag()来提高性能。 - 资源管理:使用
php-fpm管理长连接,防止超载。 - 负载均衡:在多核服务器上部署PHP实例,使用
php-fpm和nginx反向代理。
通过以上步骤,你可以成功安装并使用SSE实现实时数据推送,适用于聊天、股票行情、地理位置等实时应用。









