javascript - 从另一个事件 Node js 发出事件

标签 javascript node.js express socket.io

我正在尝试在 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);
  });
});

在这里,我可以尝试从登录事件发出通知事件,但它没有在控制台中打印任何内容,登录事件从触发>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
     });

});

更多信息:http://socket.io/docs/rooms-and-namespaces/

关于javascript - 从另一个事件 Node js 发出事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37695241/

相关文章:

javascript - 从数据库获取值并在 React 前端显示的最佳方法

node.js - 带 Mailgun 的 Nodemailer

javascript - 如何从 mapCenter 获取纬度和经度作为单独的变量

javascript - 按年份过滤json数据

javascript - 页面完全写入后,从 cgi 重定向到 html

node.js - 带有 grunt-nodemon、watch 和 jshint 的 Gruntjs

javascript - 读取 iframe 的 DOM

Node.js 应用程序在 Chromium 中无法正确加载 : Connection timed out while reading response header from upstream

node.js - 访问另一个子文件夹express.js中的html文件

node.js - 如何测试我的 Express 应用程序的响应是否包含某些 HTML 标签/文本?