从另一个事件节点js

时间:2016-06-08 06:53:14

标签: javascript node.js express socket.io

我正在尝试在 admin.html

中获取新的关联用户列表
  1. client.html(客户端登录身份验证)
  2. admin.html(通知新用户加入)
  3. 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 做的,我需要设置时间循环以持续检查新用户是否已添加。这就是我在用户连接时自动触发事件的原因。

    请告诉我如何实现这个目标?

2 个答案:

答案 0 :(得分:1)

使用

io.sockets.emit('notification', '')

这将排放每个人。我想你可以在admin.html中捕获该事件。

但如果您认为数据需要安全并且您不想发送给所有人,则可以使用套接字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/

答案 1 :(得分:0)

试试这个:

io.on('connection', function(socket){
  socket.on('login', function(msg){
    socket.broadcast.emit('notification', 'new user joined');
    console.log(msg);
  });
});

服务器上socket.on('notification', ...)的代码不起作用,因为它是已发出notification的服务器