【问题标题】:emit event from another event node js从另一个事件节点js发出事件
【发布时间】:2016-06-08 06:53:14
【问题描述】:

我正在尝试在 admin.html

中获取新的连接用户列表
  1. client.html(客户端登录认证)
  2. 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);
  });
});

在这里我可以尝试从 login 事件发出 notification 事件,但它没有在控制台中打印任何内容,login 事件从 触发>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 开始,我需要设置时间循环以不断检查新用户是否已添加。这就是为什么我希望在用户连接时自动触发事件。

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

【问题讨论】:

  • socket.emit('notification', 'new user joined'); 在客户端而不是服务器上发出 notification 事件。
  • 有没有办法从服务器端发出事件?或建议如何在 admin.phtml 中显示新用户
  • 是的,在客户端上写相同的行。查看socket.io/docs了解更多详情
  • 现在只抓住了你告诉@MukeshSharma :-) 我也尝试过 client.html 但没有运气请查看我更新的问题
  • 分享client.phtml的逻辑

标签: javascript node.js express socket.io


【解决方案1】:

使用

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/

【讨论】:

  • 好主意,伙计。有效。来自我的+1,但这似乎不是一种正确的方式,因为它是向每个客户广播的(所有细节都是保密的,我需要限制只会发送管理员)。但是我不确定,如果您认为这是正确的方法,请用您的有力理由更新您的答案。
【解决方案2】:

试试这个:

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

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

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 2017-04-12
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多