Nodejs socketio仅在特定房间收听

时间:2013-11-25 09:59:10

标签: node.js socket.io

我正在尝试向所有观看者发送管理员通知。当管理员连接我加入(' admin')并且我想在该房间收听通知消息并将其传递给所有用户。这是有效的,但是我从用户那边做了一个测试,发现我仍然可以发送消息,好像我是管理员一样!?

var express = require('express'),
    app = express(),
    http = require('http'),
    connect = require('connect'),
    cookieParser = express.cookieParser('fwefwefvccc'),
    sessionStore = new connect.middleware.session.MemoryStore();


app.configure(function () {
    app.use(cookieParser);
    app.use(express.session({ store: sessionStore }));
});

var server = http.createServer(app),
    io = require('socket.io').listen(server),
    sessionSockets = require('session.socket.io'),
    sessions = new sessionSockets(io, sessionStore, cookieParser);

sessions.on('connection', function (err, socket, session) {

    // Client functions trimmed for SO

    socket.on('adminJoin', function(data) { 

        if(data.password == "testing") {
            socket.join('admin');
        }
    }
    socket.in('admin').on('notification', function (data) {

        io.sockets.emit("notification", {
            'type': data.type,
            'msg': data.msg
        });
    });
});

似乎忽略了用户不在/ admin / room

中的事实

1 个答案:

答案 0 :(得分:0)

我知道这不是你想要做的,但考虑到没有回复的时间,我认为这种“解决方法”可以解决问题。

请注意,这是未经测试的代码:)

当管理员加入时,让套接字知道它是管理员。

socket.on('adminJoin', function(data) { 
    if(data.password == "testing") {
        socket.set("isadmin",true);
    }
}

当套接字收到消息时,请检查套接字是否为admin。

socket.on("message,function(){
 if(socket.get("isadmin") == true)
 {
  io.sockets.emit("notification","Somethign happende")
 }

})