在Node.js中如何实现`text/event-stream`的服务器端处理?
时间: 2024-09-10 19:27:37 浏览: 84
在Node.js中,`text/event-stream`通常用于创建实时流式数据发送,比如Websocket-like的行为,但是它并不是Node.js内置的一部分。如果你想实现类似的功能,可以使用第三方库如`ReadableStream`或者`ws`(WebSocket库)。以下是使用`ws`库的一个简单示例:
```javascript
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', (ws) => {
console.log('Client connected');
ws.on('message', (message) => {
// 这里你可以将接收到的消息转换成event-stream格式并发送出去
const eventStream = message.split('\n').map((line) => `data: ${line}\n\n`);
eventStream.forEach(line => ws.send(line));
});
ws.on('close', () => {
console.log('Client disconnected');
});
});
相关问题
text/event-stream 是什么?怎么使用
`text/event-stream` 是一种轻量级的流媒体数据传输协议,常用于实时Web应用程序中,比如长轮询(Long Polling)的替代方案。它允许服务器持续推送文本事件到客户端浏览器,而不需要客户端频繁地发起新的HTTP请求。当有新数据可用时,服务器会发送一条包含事件的消息,客户端可以处理并更新前端视图。
使用 `text/event-stream` 的基本步骤如下:
1. **服务器端**:
- 创建一个HTTP响应,并设置`Content-Type`为`text/event-stream`。
- 当有新数据时,通过`Event: data`头标记数据行,然后发送完整的事件。
- 使用`data:`、`id:`、`retry:`等字段作为自定义事件属性。
```javascript
// Node.js 示例
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
});
res.write('data: Hello, client!\n\n'); // 发送一条初始消息
```
2. **客户端** (JavaScript):
- 使用浏览器的`XMLHttpRequest` 或者 Fetch API 连接服务器。
- 客户端需要监听`onmessage`事件来接收服务器推送的数据。
- 对于断线重连,浏览器会自动处理`Retry-After`头或`Connection: close`等提示。
```javascript
let stream = new EventSource('/stream');
stream.onmessage = function(event) {
console.log(event.data);
};
```
阅读全文