【问题标题】:Broadcasting with socket.io?使用 socket.io 广播?
【发布时间】:2011-08-17 09:18:00
【问题描述】:

使用 socket.broadcast() 将一个简单的函数从数据库结果中提供 JSON 字符串广播到客户端。我希望在值更改时更新客户端。目前,广播功能是使用 setTimeout 每 1 秒连续广播一次。在Firebug中查看请求日志,有连续的GET响应,我觉得不是什么好事……

只是想知道使用套接字的最佳做法是什么?这些请求会杀死一些东西吗?解决方案是否会比较时间戳或类似的方法来停止不必要地发送请求?

//server-side
function checkData() {
    client.query('SELECT * FROM data', function selectCb(err, data) {
        socket.broadcast(processData(data));
        setTimeout(checkData, 1000);
    });
}

//client-side
socket.on('message', function(data) {
    $('#container').html(JSON.stringify(JSON.parse(data), null));
});

//sample data
[{
    "type":"Statistic1",
    "value":65.2,
    "timestamp":"2011-04-29T16:22:39.000Z"
},{
    "type":"Statistic2",
    "value":18.6,
    "timestamp":"2011-04-29T16:22:39.000Z"
}]

感谢您的帮助!

【问题讨论】:

    标签: json node.js socket.io


    【解决方案1】:

    这取决于您发送的数据。套接字的好处之一是您可以选择何时向客户端发送数据。保存一些获取请求,仅在您有新内容要发送时才广播数据。

    【讨论】:

    • 我已经用正在发送的数据样本更新了我上面的帖子。如何保存获取请求,以便它知道何时发送被认为是新的数据?
    • 在服务器上跟踪您发送的最后一个项目的时间戳。除了每秒执行一次 select * 之外,您还可以挂钩到正在更新数据库的任何内容,或者您​​可以使用 memcsche 执行类似的策略
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2018-12-23
    • 1970-01-01
    • 2012-07-14
    • 2021-12-07
    相关资源
    最近更新 更多