首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs socketio只监听特定房间

Nodejs socketio只监听特定房间
EN

Stack Overflow用户
提问于 2013-11-25 17:59:10
回答 1查看 964关注 0票数 0

我正在尝试发送一个管理通知给所有的观众。当管理员连接时,我加入(‘admin’),我想在那个房间里监听通知消息,并将它们传递给所有用户。这是有效的,但是我在用户端做了一个测试,发现我仍然可以像管理员一样发送消息!?

代码语言:javascript
复制
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中的事实

EN

回答 1

Stack Overflow用户

发布于 2014-02-05 22:33:09

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

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

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

代码语言:javascript
复制
socket.on('adminJoin', function(data) { 
    if(data.password == "testing") {
        socket.set("isadmin",true);
    }
}

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

代码语言:javascript
复制
socket.on("message,function(){
 if(socket.get("isadmin") == true)
 {
  io.sockets.emit("notification","Somethign happende")
 }

})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20189159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档