从另一个事件节点js发射事件
我正在尝试在admin.html中获取新的连接用户列表
- client.html(客户端loginauthentication)
- admin.html(通知新用户join)
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); }); });
在这里,我可以尝试从login事件发出通知事件,但它没有打印任何东西在控制台,从client.html login事件获取触发器。
当我从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>
login事件只会发出, 通知不起作用,当我运行通知事件时,它是独立的。
注意:假设我是从admin.html做的,我需要设置时间循环来连续检查新用户是否已经添加了。 这就是为什么我在用户连接时自动触发事件。
请教我如何做到这一点?
使用
io.sockets.emit('notification', '')
这会排出每个人。 我想你可以在admin.html中捕获这个事件。
但是,如果您认为数据需要安全,而您又不想发送每个人,则可以使用socket 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 }); });
更多信息: http : //socket.io/docs/rooms-and-namespaces/
尝试这个:
io.on('connection', function(socket){ socket.on('login', function(msg){ socket.broadcast.emit('notification', 'new user joined'); console.log(msg); }); });
服务器上的socket.on('notification', ...)
的代码不起作用,因为它是发出notification
服务器