这是我第一次使用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。之后我创建了一个新的房间,其名称与user_id相同。当然要断开房间应该删除。我注意到sub.on()不止一次被触发,但我无法弄明白为什么。我将不胜感激任何帮助。提前谢谢!
答案 0 :(得分:1)
问题是你在connection
事件中使用了一个处理程序,每次客户端连接它都会执行connection
事件中的所有内容,包括你的sub.on
将sub.on
放在connection
事件之外,它应该停止双重消息