SSE长连接 EventSource的实时输出
时间: 2023-07-02 15:06:52 浏览: 161
EventSource:服务器发送事件(SSE)的简单Swift客户端库
SSE(Server-Sent Events)允许服务器向客户端发送事件流,这些事件可以是任意类型的数据,例如文本、JSON、XML 等等。客户端通过 EventSource 接口连接到服务器,服务器通过 HTTP 协议不断向客户端发送事件流,客户端可以实时处理这些事件。
在使用 SSE 进行实时输出时,服务器会不断地向客户端发送数据,客户端需要通过监听 onmessage 事件来实时处理接收到的数据。以下是一个简单的示例:
```
const eventSource = new EventSource('/stream'); // 连接到服务器的 SSE 接口
eventSource.onmessage = function(event) {
const data = JSON.parse(event.data); // 解析接收到的数据
// 处理数据的代码
};
```
在服务器端,我们需要使用一些特殊的 HTTP 头部来启用 SSE。例如,下面是一个 Node.js 的示例:
```
const http = require('http');
http.createServer(function(request, response) {
response.writeHead(200, {
'Content-Type': 'text/event-stream', // 指定响应内容的类型为 text/event-stream
'Cache-Control': 'no-cache', // 禁用缓存
'Connection': 'keep-alive' // 使用长连接保持连接
});
setInterval(function() {
const data = JSON.stringify({ message: 'Hello, world!' });
response.write(`data: ${data}\n\n`); // 发送数据
}, 1000);
}).listen(8080);
```
在这个示例中,我们使用 setInterval 定时发送数据。在每次发送数据时,我们需要使用 data 字段来指定数据的内容,同时在数据后面添加两个换行符(\n\n)表示数据的结束。这是因为 SSE 的数据格式要求每个数据块以两个换行符(\n\n)结束。
以上就是使用 SSE 进行实时输出的基本流程。需要注意的是,SSE 只能用于服务器向客户端发送数据,客户端无法向服务器发送数据。如果需要双向通信,需要使用 WebSocket。
阅读全文