我正在尝试在 admin.html 中获取新的已连接用户列表
- client.html(客户端登录认证)
- admin.html(通知新用户加入)
server.js
app.get('/', function(req, res){
res.sendfile('client.html');
});
app.get('/admin', function(req, res){
res.sendfile('admin.html');
});
io.on('connection', function(socket){
socket.on('login', function(msg){
socket.emit('notification', 'new user joined');
});
socket.on('notification', function(msg){
console.log(msg);
});
});
在这里,我可以尝试从登录事件发出通知事件,但它没有在控制台中打印任何内容,登录事件从触发>client.html.
当我从 client.html 尝试此操作时
<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
var socket = io();
$('form').submit(function(){
var a= $('#username').val();
var b= $('#usermail').val();
var c= $('#reason').val()
socket.emit('login',{username:a,usermail:b,reason:c});
socket.emit('notification','new user joined');
});
</script>
当我在通知事件正在工作时单独运行时,登录事件只会发出,通知不起作用。
注意:假设如果我从admin.html这样做,我需要设置时间循环来不断检查新用户是否已添加。这就是为什么我希望在用户连接时自动触发事件。
请告诉我如何实现这一目标?
最佳答案
使用
io.sockets.emit('notification', '')
这将释放每个人。我想你可以在 admin.html 中捕获该事件。
但是如果您认为数据需要安全并且不想发送给所有人,则可以使用套接字io rooms
。
在admin.html中
//after socket connection
socket.emit('join_admin_room')
在你的套接字代码中:
io.on('connection', function(socket){
socket.on('join_admin_room', function(){ //from admin.html
socket.join('admin'); //add this socket to admin room
})
socket.on('login', function(msg){ /from index.html
//this will go to sockets in admin room
io.to('admin').emit('notification') //to admin.html
});
});
关于javascript - 从另一个事件 Node js 发出事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37695241/