在全局数组 + Node.js 中存储 socket.io 发出
Storing socket.io emits in global array + Node.js
有没有办法将 socket.io 的所有发射存储在一个全局数组中,这样我就可以在新用户加入网站时循环发射,并可以在 'canvas drawing' 当前所在的位置获取.我希望新用户看到已经完成的工作,然后进行协作。
还有其他方法可以解决这个问题吗?
如果您只想在服务器 运行 期间存储发射,您可以简单地声明一个模块级数组并将每个发射推入该数组。然后,在该服务器执行期间的任何未来时间,您都可以查询数组。
如果您希望跨服务器调用存储发射,则需要将它们存储到某些持久存储(文件、数据库等...)。
// 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);
};
})();
由于可能会发送或接收许多不同的消息,您可以添加自己的逻辑来决定哪些消息保存在数组中。
有没有办法将 socket.io 的所有发射存储在一个全局数组中,这样我就可以在新用户加入网站时循环发射,并可以在 'canvas drawing' 当前所在的位置获取.我希望新用户看到已经完成的工作,然后进行协作。
还有其他方法可以解决这个问题吗?
如果您只想在服务器 运行 期间存储发射,您可以简单地声明一个模块级数组并将每个发射推入该数组。然后,在该服务器执行期间的任何未来时间,您都可以查询数组。
如果您希望跨服务器调用存储发射,则需要将它们存储到某些持久存储(文件、数据库等...)。
// 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);
};
})();
由于可能会发送或接收许多不同的消息,您可以添加自己的逻辑来决定哪些消息保存在数组中。