存储socket.io在全局数组+ Node.js中发出

时间:2016-06-15 16:07:34

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

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

我可以采取其他任何方式解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

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

如果您想要跨服务器调用存储的emits,那么您需要将它们存储到某个持久存储(文件,数据库等等)。

// 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);
    };
})();

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