【问题标题】:Send messages from server to client socket.io从服务器向客户端 socket.io 发送消息
【发布时间】:2016-08-28 01:28:45
【问题描述】:

我正在尝试使用 socket.io 从 NodeJS 服务器向客户端发送消息

但是,我在整个互联网上发现了相同的做法,即用 io.on('connection', handler) 包装发射,然后让服务器监听一个特殊的“通道”事件,如下所示:

var io = require('socket.io')();

var socketioJwt = require('socketio-jwt');
var jwtSecret = require('./settings').jwtSecret;

var User = require('./models/users').User;

io.set('authorization', socketioJwt.authorize({
  secret: jwtSecret,
  handshake: true
}));

var sockets = [];

io.on('connection', function(socket) {
    sockets.push(socket);
});

sendLiveUpdates = function(gameSession) {
    console.log(sockets);
}

exports.sendLiveUpdates = sendLiveUpdates;

exports.io = io;

我的问题是:我想在连接包装器之外发出消息,例如来自我的路由或其他脚本。有可能吗?

谢谢。

【问题讨论】:

标签: javascript node.js sockets socket.io server


【解决方案1】:

是的。您只需要保留对套接字的引用即可。

// Just an array for sockets... use whatever method you want to reference them
var sockets = [];

io.on('connection', function(socket) {
  socket.on('event', function() {
    io.emit('another_event', message);
  });

  // Add the new socket to the array, for messing with later
  sockets.push(socket);
});

然后在你的代码中的其他地方......

sockets[0].emit('someEvent');

我通常做的是为新客户端分配一个 UUID,并将它们添加到由该 UUID 键入的对象中。这对于日志记录和其他方面都很方便,因此我在任何地方都保持一致的 ID。

【讨论】:

  • 实际上我完全按照你的建议做了,但我不断得到一个空数组,我不知道为什么。这是我的代码:var sockets = []; io.on('connection', function(socket) { var userID = socket.client.request.decoded_token.id; // save user to the db sockets.push(socket.id); }); sendLiveUpdates = function(gameSession) { console.log(sockets); } exports.sendLiveUpdates = sendLiveUpdates; 我正在导出 sendLiveUpdates 函数并在我的脚本中的其他地方使用它。
  • 我刚刚编辑了我的问题。请告诉我我做错了什么@Brad
  • @georgehelou 您推送的是 ID,而不是套接字。推动实际的插座。但是,您的数组不应为空。还有其他问题...您将不得不进行一些基本调试以找出为什么您的数组中没有任何内容。
  • 出于某种原因,无论我做什么,sockets 数组总是返回为空。我想这是因为我需要函数和整个文件,而套接字尚未推送到数组。这可能吗?
  • @georgehelou 没有。只要您在建立连接后拨打sendLiveUpdates(),就可以了。早些时候你在连接上有一些调试输出..那是触发吗?我不可能猜到。您没有显示相关代码,实际上这是您必须调试才能继续进行的一些基本操作。
猜你喜欢
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 2021-10-10
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
相关资源
最近更新 更多