【问题标题】:Efficient way to broadcast from sockjs-node?从 sockjs-node 广播的有效方法?
【发布时间】:2013-04-03 06:11:20
【问题描述】:

我想向所有连接到我的 sockjs-node 服务器的客户端广播消息。

现在我有以下代码

var clients = {};
var echo = sockjs.createServer();
echo.on('connection', function(conn) {
    clients[conn.id] = conn;

    for(key in clients) {
        if(clients.hasOwnProperty(key)) {
            clients[key].write('test');
        }
    }

    conn.on('close', function() {
        delete clients[conn.id];
    });
});

有没有更有效的方法?

也许

var clients = [];
var echo = sockjs.createServer();
echo.on('connection', function(conn) {
    var index = clients.push(conn);

    var lenght = clients.length;
    while(length--) {
        if(clients[length] !== undefined) {
            clients[length].write('test');
        }
    }

    conn.on('close', function() {
        delete clients[index];
    });
});

谢谢

【问题讨论】:

  • 过度优化。我怀疑你永远不会看到差异。
  • 我正在尝试在我的共享服务器上快速且内存不足。
  • 让我们从基本问题开始:您是否真的遇到了速度/内存使用问题?还是您正在预先优化(这是万恶之源)?无论是哪种优化,都不会显着提升性能。
  • 引用 conn 对象而不是克隆它可能是个好主意。我不知道怎么做。
  • 我建议使用内置支持广播的socket.io。如果你愿意,我可以发布一个例子

标签: javascript performance node.js sockjs


【解决方案1】:

1.)for...in 比常规 for 或 while 慢,并没有太多
2.)也可能从对象中获取值比从数组中获取值要慢(因为您需要从字符串中获取地址,但您可以立即从数组索引中计算地址),也不是很多
所以第二个更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 2018-01-05
    • 2018-05-23
    • 1970-01-01
    • 2021-03-24
    • 2019-09-18
    相关资源
    最近更新 更多