用户收到来自nodejs的超过1个通知

这是我第一次使用nodejs,并且遇到了一些问题。 主要的问题是用户从服务器接收到超过1个信号。 计数基于页面的刷新。 以下是我的代码:

var http = require('http'); var server = http.createServer().listen(1332); var io = require('socket.io').listen(server); var redis = require('redis'); var sub = redis.createClient(); //Subscribe to the Redis chat channel sub.subscribe('notification_count'); console.log("Server is running...\nClick on Ctrl+C to exit"); io.sockets.on('connection', function (socket) { var user_id = socket["handshake"]["query"]["user_id"]; console.log("user_id", user_id); socket.room = user_id; socket.join(user_id); socket.on('disconnect', function(){ socket.leave(socket.room); }); //Grab message from Redis and send to client sub.on('message', function(channel, message){ io.sockets.in(message).emit('message', message ); }); }); 

这里是客户端的JS代码:

 var socket = io.connect('localhost:1332', { query: "user_id={{ request.user.id }}" }); socket.on('connect', function(){ console.log("connected"); }); socket.on('message', function(message) { //something }); 

基本上从服务器连接我发送到服务器user_id。 之后,我创build了一个名称与user_id相同的新房间。 当然关于断开房间应该删除。 我注意到,sub.on()被解雇了不止一次,但我不明白为什么。 我将不胜感激任何帮助。 先谢谢你 !

问题是你在connection事件中使用了一个处理程序,每次客户端连接它都会执行connection事件中的所有事情,包括你的sub.on事件

sub.on放在connection事件之外,它应该停止双重消息