websocket后端主动向前端发送消息
时间: 2024-10-16 17:03:37 浏览: 38
piggy-shake-backend:用于Piggy Shake的WebSocket服务器(Hack The Planet 2015)
WebSocket是一种全双工的网络通信协议,它允许服务器在没有任何用户请求的情况下主动向客户端推送信息,无需刷新页面。在WebSocket后端主动发送消息到前端时,通常涉及以下几个步骤:
1. **连接建立**:服务器创建一个新的WebSocket连接,并监听连接状态变化。
2. **握手协商**:服务器通过HTTP升级请求(Upgrade Header)与客户端建立WebSocket连接,如`Connection: Upgrade, Upgrade: WebSocket`。
3. **设置心跳机制**(可选):为了保持连接活跃,服务器可能会定期向客户端发送空数据包,称为心跳包,客户端收到后回应确认。
4. **触发消息发送**:当有需要主动推送的数据时,服务器可以直接调用自己的WebSocket API发送数据,消息会封装成JSON或其他适当格式。
5. **接收与处理**:客户端接收到消息后,会在合适的事件回调中处理这些数据,通常是JavaScript代码的一部分。
以下是使用Node.js的Express和ws库的一个简单示例:
```javascript
const express = require('express');
const WebSocket = require('ws');
const app = express();
const wss = new WebSocket.Server({ server: app });
wss.on('connection', (ws) => {
ws.send(JSON.stringify({ message: 'Server initiated a message' }));
// 定义心跳间隔
const heartbeatInterval = setInterval(() => {
if (!ws.readyState === WebSocket.OPEN) return;
ws.ping(); // 发送心跳
}, 60 * 1000); // 每分钟一次
ws.on('pong', () => {
console.log('Received pong');
});
ws.on('close', () => {
clearInterval(heartbeatInterval);
console.log('Client disconnected');
});
});
app.listen(8080, () => {
console.log('WebSocket server is listening on port 8080');
});
```
阅读全文