我正在尝试发送一个管理通知给所有的观众。当管理员连接时,我加入(‘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中的事实
发布于 2014-02-05 22:33:09
我知道这不是你想要做的,但是考虑到没有回复的时间,我认为这个“变通办法”可以解决这个问题。
请注意,这是未经测试的代码:)
当管理员加入时,让套接字知道它是管理员。
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")
}
})https://stackoverflow.com/questions/20189159
复制相似问题