【问题标题】:Emit multiple messages socket.io from one open connection从一个打开的连接发出多条消息 socket.io
【发布时间】:2016-06-25 00:21:43
【问题描述】:

我是 socket.io 的新手,并试图弄清楚如何发送多条消息。这是我正在处理的场景,

function setupServer(server) {
    var socketIO = require("socket.io").listen(server);
    socketIO.sockets.on('connection', function (socket) {
        console.log("client is connected");
        socket.emit('update', { progress: "starting..." })
    });
}

我必须从另一种方法调用 setupServer(server),并且我在客户端收到“正在启动...”。

但问题是,我想稍后发送更多/多条消息。无法发送消息数组,因为我的应用程序每隔 10 毫秒(在回调函数中)构建消息字符串,我想在它们创建后立即发送。

有什么解决办法吗?是否可以让套接字对象引用在此函数之外重用?

【问题讨论】:

  • 在您的示例中,如果您想向所有连接的用户发送消息,您可以使用socketIO.emit()。您可以在数组中的connection 事件中存储对socket 的引用。

标签: node.js socket.io


【解决方案1】:

来自 socket.io 文档:http://socket.io/docs/#broadcasting-messages

要广播,只需添加一个广播标志来发出和发送方法调用。广播意味着向除了启动它的套接字之外的所有其他人发送消息。

function setupServer(server) {
    var socketIO = require("socket.io").listen(server);
    socketIO.on('connection', function (socket) {
        console.log("client is connected");
        socket.emit('update', { progress: "starting..." });

        startBroadCastFromSocket(socket, 3); 

        socket.on('disconnect', function(){
          stopBroadcastFromSocket(socket);
        });
    });

    // broadcast message to all sockets
    setInteval(function() {
      broadcastMessageToEveryone(socketIO, {body: 'Hello everyone (FROM SERVER)', timestamp: new Date());
    }, 1000);
}

function broadcastMessageToEveryone(io, body) {
  io.emit('message', {body: body, timestamp: new Date()});
}

function broadcastMessageFromSocket(socket, body) {
  socket.broadcast.emit('message', {body: body, timestamp: new Date()});
}

var socketIntervals = {};

function stopBroadcastFromSocket(socket) {
  if(socketIntervals[socket.id]) {
    clearInterval(socketIntervals[socket.id]);
  }
}

function startBroadcastFromSocket(socket, seconds) {
  socketIntervals[socket.id] = setInterval(function(){
    broadcastMessageFromSocket(socket, 'Hello!');
  }, seconds*1000);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    相关资源
    最近更新 更多