我正在为共享信息的多个查看屏幕创建一个同步的Web应用程序,并使用socket.io跟踪实时更改。我遇到的问题是,当我第一次启动服务器时,我获得了更多的套接字连接,然后在刷新连接的页面时又获得了更多的套接字连接。
由于我不确定代码在哪里(部分继承)在哪里,所以我将包括一些服务器端代码和一些客户端代码。
整个文件上都有套接字调用,完整的github存储库在这里:https://github.com/Panzemek/Watch-the-screens
我尝试在卸载时断开套接字,但是没有影响。
$(this).unload(() => {
socket.close();
})
服务器:
var http = require("http").Server(app);
var io = require("socket.io")(http);
var events = require("events");
var serverEmitter = new events.EventEmitter();
...
io.on("connection", socket => {
console.log("socket connected...", socket.id);
socket.on("game start", () => {
console.log("game start clock time is " + serverClock);
serverClock = 5;
});
//round end last try
serverEmitter.on("round ended", data => {
console.log("round ended");
data.time = defaultRoundLen;
socket.emit("new round", data);
});
//terror update
socket.on("terror update", terrorVal => {
io.emit("terror update", terrorVal);
});
...
客户端,在我们的clock.js文件中:
var socket = io();
$(this).ready(function() {
setPauseButtonText();
timeString = $("#clock").text();
time =
parseInt(timeString.substring(0, 2)) * 3600 +
parseInt(timeString.substring(3, 5)) * 60 +
parseInt(timeString.substring(6, 8));
socket.emit("server time init", time);
timerInterval = setInterval(function() {
if (!isPaused) {
time -= 1;
$("#clock").text(formatTime(time));
}
}, 1000);
});
这导致以下错误: “((node:8712)MaxListenersExceededWarning:可能检测到EventEmitter内存泄漏。添加了11个圆形结束的侦听器。使用generator.setMaxListeners()增加限制”