微信小程序启用 SSE长连接 一直接受调用代码示例
时间: 2024-09-10 21:02:16 浏览: 178
微信小程序通过Server-Sent Events (SSE) 长连接功能,可以让服务器主动向客户端推送数据,而无需客户端频繁请求更新。以下是启用SSE并在微信小程序中接收调用的一个简单示例:
首先,在服务端,你需要设置一个支持SSE的HTTP响应头,并开启长连接:
```javascript
// server.js (Node.js 示例)
const http = require('http');
const events = require('events');
const server = http.createServer((req, res) => {
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
const stream = new events.EventEmitter();
// 发送事件数据
setInterval(() => {
stream.emit('data', JSON.stringify({ message: 'Hello from server' }));
}, 5000); // 每隔5秒发送一次
stream.on('close', () => {
console.log('Client disconnected');
});
req.on('close', () => {
stream.removeAllListeners();
server.close();
});
res.on('finish', () => {
stream.emit('end');
});
stream.pipe(res);
});
server.listen(8080, () => {
console.log('Server started on port 8080');
});
```
然后,在微信小程序前端,你可以使用`wx.request`结合WebSocket API的模拟实现来接收并处理SSE数据:
```javascript
// app.js (微信小程序)
Page({
data: { messages: [] },
onLoad: function() {
this.startSse();
},
startSse: function() {
const that = this;
wx.request({
url: 'https://your-server-url.com/server.js', // 替换为实际的服务器地址
method: 'GET',
header: {
'Accept': 'text/event-stream'
},
success(res) {
if (res.statusCode === 200 && res.data.event === 'message') {
that.setData({ messages: [...that.data.messages, JSON.parse(res.data.data)] });
}
},
fail(err) {
console.error('Error fetching SSE:', err);
},
networkTimeout: 60000, // 设置超时时间防止阻塞
});
}
})
```
请注意,由于微信小程序对WebSocket的支持有限,这里通过模拟实现了一个简单的SSE接收。实际上在生产环境中,可能需要借助第三方库如`wxmlsocket`来更好地管理长连接。
阅读全文