【问题标题】:Storing socket.io emits in global array + Node.js在全局数组 + Node.js 中存储 socket.io 发射
【发布时间】:2016-06-15 16:07:34
【问题描述】:

有没有办法将 socket.io 的所有发射存储在一个全局数组中,这样当新用户加入网站时我可以循环发射发射并可以拾取“画布绘图”当前所在的位置。我希望新用户查看已经完成的工作,然后进行协作。

我还有其他方法可以解决这个问题吗?

【问题讨论】:

    标签: javascript node.js sockets socket.io socket.io-redis


    【解决方案1】:

    如果您只想在服务器运行期间存储发射,您可以简单地声明一个模块级数组并将每个发射推送到该数组中。然后,在该服务器执行期间的任何未来时间,您都可以查询该数组。

    如果您希望跨服务器调用存储发射,那么您需要将它们存储到一些持久性存储(文件、数据库等)。

    // save incoming data from one particular message
    var emitsForSomeMessage = [];
    
    io.on("someMessage", function(data) {
        // save the incoming data for future reference
        emitsForSomeMessage.push(data);
    });
    

    或者,如果您尝试存储所有传出的.emit() 数据,那么您可以覆盖该方法并保存发送的内容。

    var outgoingEmits = [];
    (function() {
        var oldEmit = io.emit;
        io.emit = function(msg, data) {
            outgoingEmits.push({msg: msg, data: data});
            return oldEmit.apply(this, arguments);
        };
    })();
    

    由于可能发送或接收许多不同的消息,您可以添加自己的逻辑来决定哪些消息保存在数组中。

    【讨论】:

    • 我将数组添加到服务器端还是客户端?
    • @Arihant - 这完全取决于你想要做什么。我假设您希望服务器收集数据,因此当新客户端连接到服务器时,您可以将收集的数据发送到新客户端。如果是这种情况,那么阵列需要在服务器上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    相关资源
    最近更新 更多