【发布时间】:2020-06-22 08:20:39
【问题描述】:
我在 node.js 应用程序中为 WebSocket 使用“fastify-ws”。我也在同一个端口中使用 HTTP 通信。我必须通过 WebSocket 将 HTTP 响应发送到连接的套接字。
这是我的示例代码:
var connectedSockets = [];
function socketConnect(socket, req) {
console.log('Client connected');
connectedSockets.push(socket);
socket.on('close', () => {
console.log('websocket closed');
connectedSockets = connectedSockets.filter((sk) => sk !== socket);
});
}
module.exports = { connectedSockets, socketConnect };
如果连接了任何客户端,我会将套接字推送到 connectedSockets 数组中,并在关闭时从数组中删除特定的套接字。然后我将通过 WebSockets 在另一个文件中发送如下 HTTP 响应。
const { connectedSockets } = require('../controllers');
// inside response
connectedSockets.forEach((socket) => {
socket.send(JSON.stringify(response));
});
这样就可以连接客户端了。我可以成功发送回复。如果连接了多个客户端并且关闭了一个客户端,则会在发送响应时引发类似“WebSocket 未打开就绪状态 3 (CLOSED)”的错误。问题是断开连接的套接字对象仍然在 connectedSockets 数组中,并且它有一个属性 _closedFrameReceived: true。
【问题讨论】:
标签: node.js sockets websocket fastify