javascript - 如何从连接回调之外的应用程序中的任何位置发出套接字?

标签 javascript node.js

基本上正如标题所说,我如何从任何路由向前端发出套接字?

例如假设我有一条路线

route.get("/queue", function(req, res) {
    socket.emit("add queue", "username");
});

route.get("/queue/leave", function(req, res) {
    socket.emit("leave queue", "username");
});

或者我必须在异步回调中完成所有操作吗?

最佳答案

将用户的套接字 ID 存储在 session 或全局中,这应该演示基本思想:

var io = require('socket.io');
var users = {};

io.on('connection', function(socket) {
   io.on('register', function(user) {
      users[user] = socket.id;
   });
});

route.get('/login', function(req, res) {
  ...
  req.session.user_id = user_id;
});

route.get("/queue/leave", function(req, res) {
   var socketId = users[req.session.user_id];
   io.sockets.connected[socketId].emit('alert', 'whatup?');
});

客户端:

socket.emit('register', user_id);

关于javascript - 如何从连接回调之外的应用程序中的任何位置发出套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30133094/

相关文章:

javascript - 如何在谷歌云功能中从快照创建磁盘 - Node js

node.js - wazuh API 安装失败

javascript - Javascript : onsubmit ="check_rfields();" in form tag of html. 但验证失败

javascript - 自动将水平滚动条移动到div中的右端

javascript - ng-model ="xxx"和值 ="{{xxx}}"之间的区别?

javascript - 通过 JavaScript 的请求方法保存一个值

javascript - 使用 NodeJS 缓冲区

javascript - jQuery 对象通过键获取值

javascript - Ajax 响应 xml 页面获取标题元素不起作用

node.js - 仅从 Travis 向 Coveralls 发送数据,而不是在本地测试时