【发布时间】:2016-12-23 16:51:34
【问题描述】:
您好,我一直在这里查看有关为什么我的套接字 io 服务器向客户端发射 3 次的问题。
免责声明:这不是重复的问题,请仔细查看我的问题
我就是这样绑定服务器来表达的
var server = http.createServer(app);
var io = require('socket.io').listen(server);
//var io = require('socket.io')(http);
require('./routes/sock')(io);
//server.listen(port);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
现在这就是我在 routes/sock 文件中监听的方式,我只需创建一个命名空间并开始监听事件
module.exports = function (io) {
var chat = io.of('/chat');
chat.on('connection', function (cs) {
console.log('User Connected to chat');
// save client id
var socketid = cs.id;
chat.setMaxListeners(0);
cs.on('my message', function (event) {
chat.to(socketid).emit('my message', 'for your eyes only');
});
cs.on('second message', function (event) {
chat.to(socketid).emit('second message', 'for your eyes only');
});
cs.on('third message', function (event) {
chat.to(socketid).emit('third message', 'for your eyes only');
});
.....
//other events follow with the same flow
})
}
分析
在客户端,我有日志,客户端只发出一次, 但是,当服务器响应时,它会向客户端发出 3 次,使客户端侦听器触发 3 次
我做错了什么? 这不是一个重复的问题,没有人对命名空间有同样的问题。
【问题讨论】:
-
您是否多次致电
require('./routes/sock')(io);?您似乎没有披露会导致此问题的代码,因此问题必须在您未展示的其他代码中的其他地方。 -
@jfriend00 我只从我启动快速服务器的主文件中调用
require('./routes/sock')(io);一次 -
好吧,我看不出您在显示的代码中描述的问题的原因。您尚未显示的其他代码中肯定存在问题。
-
@jfriend00 我已经编辑了问题,请检查,我的所有其他代码都在同一流程中继续,但是当服务器发出时,客户端收到了 3 次
-
我的猜测是客户端问题,在客户端中不止一次安装了事件处理程序,导致您在客户端中为给定的客户端用户事件多次运行相同的代码。