Я новичок в Redis Pub/sub, поэтому, пожалуйста, несите меня. Я пытаюсь создать IRC, где пользователи могут создавать свои собственные чаты, похожие на Gitter. Ниже я сделал то, что сделал до сих пор. Я подписываю пользователей на разные каналы по имени пользователя только для тестирования. Дело в том, что, когда я публикую на канале x, клиент, который подключен к каналу y, все равно получает то же самое сообщение. Я публикую команды redis-cli и PUBLISH.Redis Pub/Sub ChatRooms
function handleIO(socket){
function disconnect(){
console.log("Client disconnected");
socket.broadcast.emit("user d/c", socket.username+" has left!");
}
socket.on("new user", function(username){
socket.username = username;
if(socket.username == "chat"){
redisClient.subscribe("chat");
}else{
redisClient.subscribe("other");
}
socket.userColor = '#'+(Math.random()*0xFFFFFF<<0).toString(16);
socket.emit("new_user", username);
emitter.lrange("messages", 0, -1, function(err, messages){
//reversing to be in correct order
messages = messages.reverse();
messages.forEach(function(message){
message = JSON.parse(message);
socket.emit("messages", message);
});
});
socket.broadcast.emit("user connection", username+" has connected to the Haven!");
});
socket.on("disconnect", disconnect);
socket.on("send", function(msg){
var msg = JSON.stringify({ name: socket.username, messageText: msg, color: socket.userColor });
emitter.lpush("messages", msg, function(err, response){
//keep newest 10 items
emitter.ltrim("messages", 0, 9);
});
io.sockets.emit("receive", msg, socket.userColor);
});
redisClient.on("message", function (channel, message) {
console.log(channel+":"+message);
socket.emit("message", channel, message);
});
}