node.js - 如何以最少的延迟发送 Websocket 消息?

标签 node.js sockets websocket

我正在开发一个用 Node.js 编程的 Websocket 服务器,我计划向超过 20,000 个用户发送多播消息。该消息将每隔一秒定期发送一次,但我担心 Node.js 服务器的性能。

我知道 Node.js 是异步工作的,并根据需要创建和销毁线程,但我不确定它的效率。理想情况下,我希望以 5 毫秒的平均延迟发送消息。

目前,我通过运行所有连接的客户端的 for 循环向所有用户发送消息,如下所示:

function StartBroadcastMessage()
{
  console.log("broadcasting socket data to client...!");

  for(var i=0;i < clientsWithEvents.length;i++){ //Runs through all the clients

      client = clientsWithEvents[i];
      if(client.eventid.toLowerCase() == serverEventName.toLowerCase()) //Checks to see if the Client Event names and server names are the same
        client.connection.sendUTF(GetEventSocketFeed(client.eventid)); //Sends out event data to that particular client
    }

  timeoutId = setTimeout(StartBroadcastMessage,2*1000);
}

这是一种低延迟发送多播消息的有效方法,还是有更好的方法?

此外,是否有一种有效的方法可以在模拟连接到 Websocket 服务器的多个设备的服务器上执行负载测试? (到目前为止我已经找到了这个 Node 应用 https://github.com/qarea/websockets-stress-test )

最佳答案

您可以使用socket.io来广播消息。

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

io.sockets.on('connection', function (socket) {
  socket.broadcast.emit('user connected');
});

这将避免向客户端发送单个消息时出现延迟(迭代所有套接字对象并格式化消息)。

关于node.js - 如何以最少的延迟发送 Websocket 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17105248/

相关文章:

api - 具有授权的 Node JS POST 方法

java - BufferedReader 预置输入

Python:无法在AWS上使用socket.getaddrinfo()检索ipv6

python - 通过http python发送图像

ssl - 本地主机上的 Websocket 通过 https ://problems

node.js - 混合内容: 'domain' 处的页面是通过 HTTPS 加载的,但在 Angular 中请求了不安全的 HTTP 端点

node.js - 如何在 Cassandra + AWS Lambda 中处理超时

css - 在nodejs中将css动画保存为jpeg/png

ruby-on-rails - Rails 与 websockets : Triggering a controller method on model changes

google-chrome - NodeJS 和 Socket.io : Chrome not loading with WebSockets