【发布时间】:2021-06-22 06:14:09
【问题描述】:
我正在学习 Socket.io 并致力于创建一个示例,其中多个客户端可以连接到我正在广播时间的套接字服务器。但是,如果连接了一个客户端,并且连接了一个新客户端,它将停止读取第一个客户端的时间,直到他们刷新页面。我想知道是否有人能够解释为什么会发生这种情况以及实现我所寻找的最佳实践是什么?
---编辑---
我相信这与我现在如何设置/清除间隔有关。
似乎当我的clearInteral(interval) 方法被命中时,任何活动客户端的连接都会在新客户端启动之前停止。
但是,我仍然不完全确定解决此问题的最佳做法是什么。
服务器:
let interval;
io.on("connection", socket => {
console.log(socket);
console.log("New client connected");
if (interval) {
clearInterval(interval);
}
interval = setInterval(() => getApiAndEmit(socket), 1000);
socket.on("disconnect", () => {
console.log("Client disconnected");
});
});
const getApiAndEmit = async socket => {
try {
const d = new Date();
const formattedDate = `${d.getMonth()}/${d.getDay()}/${d.getFullYear()}`;
const formattedTime = `${("0"+d.getHours()).slice(-2)}:${("0"+d.getMinutes()).slice(-2)}:${("0"+d.getSeconds()).slice(-2)}`;
socket.emit("FromAPI", `${formattedDate} ${formattedTime}`);
} catch (error) {
console.error(`Error: ${error.code}`);
}
};
客户:
const endpoint = "MY_ENDPOINT";
const socket = socketIOClient(endpoint);
socket.on("FromAPI", data => this.setState({ response: data }));
【问题讨论】: