nginx配置sse
时间: 2024-12-31 15:44:44 浏览: 84
### 如何在 Nginx 中配置服务器发送事件 (SSE)
#### 配置 PHP 和 Nginx 支持 SSE
为了使 Nginx 正确处理 Server-Sent Events(SSE),需要调整 Nginx 的配置文件来确保长连接不会被过早关闭。通常情况下,Nginx 默认会设置较短的超时时间和缓冲区大小,这可能会中断 SSE 连接。
对于 PHP 应用程序,在 `nginx.conf` 或站点特定配置文件中加入如下指令可以改善 SSE 性能:
```nginx
location /eventsource {
proxy_pass http://backend;
# 关闭代理缓存
proxy_buffering off;
# 设置客户端最大响应体尺寸为0表示不限制
client_body_buffer_size 0;
# 增加读取操作的超时时间
keepalive_timeout 65s;
}
```
上述配置通过禁用代理缓存并允许更大的数据流传输,从而支持更稳定的 SSE 流[^1]。
#### 处理 PHP 后端逻辑
PHP 脚本应当持续运行并向浏览器推送更新直到连接断开或达到设定的时间限制。下面是一个简单的例子展示如何创建一个用于发送消息给用户的 PHP 文件 `server-push.php`:
```php
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$time = date('r');
echo "data: The server time is: {$time}\n\n";
flush();
?>
```
此脚本设置了适当的内容类型,并立即向客户端发送一条包含当前服务器时间的消息。注意每次输出后调用了 `flush()` 函数以确保即时传送数据到客户端[^2]。
#### 实现前端 JavaScript 接收 SSE 数据
当页面加载完成之后,可以通过 JavaScript 创建一个新的 `EventSource` 对象实例并与指定 URL 建立连接。一旦成功建立了连接,则可以根据需求监听不同的回调函数来进行相应的业务处理。
以下是基于 AngularJS 框架的一个简单实现方式:
```javascript
if (!!window.EventSource) {
var source = new EventSource('/apis/messages');
source.onopen = function(event) {
// 当连接打开时触发
};
source.onmessage = function(event) {
var data = event.data;
console.log("hb_data:" + data);
$scope.$broadcast("BroadInfo", data); // 广播信息
};
}
```
这段代码展示了如何初始化 `EventSource` 来接收来自 `/apis/messages` 地址的数据,并将其打印至控制台以及广播出去供其他组件使用[^3]。
阅读全文
相关推荐



















