mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Deep-clone messages when there are multiple recipients
Fixes #85 As well as adding deep-clone (via the new dependency on the 'clone' module), we no longer clone the message if there is a single recipient. This makes simple node-to-node flows more efficient. I've done some simple profiling using process.hrtime to time how long the Node.send function takes, and at best, this change is neutral to performance.
This commit is contained in:
parent
6a4aa1ff21
commit
e1dbb95396
@ -25,6 +25,7 @@
|
||||
"mqtt": "~0.3.3",
|
||||
"ws": "~0.4.31",
|
||||
"fs-extra": "~0.8.1",
|
||||
"clone": "~0.1.11",
|
||||
"mustache": "~0.7.2",
|
||||
"cron":"1.x",
|
||||
"ntwitter":"0.5.0",
|
||||
|
18
red/nodes.js
18
red/nodes.js
@ -17,6 +17,7 @@ var util = require("util");
|
||||
var EventEmitter = require("events").EventEmitter;
|
||||
var fs = require("fs");
|
||||
var path = require("path");
|
||||
var clone = require("clone");
|
||||
var events = require("./events");
|
||||
var storage = null;
|
||||
|
||||
@ -149,22 +150,28 @@ Node.prototype.send = function(msg) {
|
||||
for (var i in this.wires) {
|
||||
var wires = this.wires[i];
|
||||
if (i < msg.length) {
|
||||
for (var j in wires) {
|
||||
if (msg[i] != null) {
|
||||
var msgs = msg[i];
|
||||
if (!util.isArray(msg[i])) {
|
||||
msgs = [msg[i]];
|
||||
}
|
||||
if (wires.length == 1) {
|
||||
// Single recipient, don't need to clone the message
|
||||
var node = registry.get(wires[0]);
|
||||
if (node) {
|
||||
for (var k in msgs) {
|
||||
var mm = msgs[k];
|
||||
var m = {};
|
||||
for (var p in mm) {
|
||||
if (mm.hasOwnProperty(p)) {
|
||||
m[p] = mm[p];
|
||||
node.receive(mm);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Multiple recipients, must send message copies
|
||||
for (var j in wires) {
|
||||
var node = registry.get(wires[j]);
|
||||
if (node) {
|
||||
for (var k in msgs) {
|
||||
var mm = msgs[k];
|
||||
var m = clone(mm);
|
||||
node.receive(m);
|
||||
}
|
||||
}
|
||||
@ -173,6 +180,7 @@ Node.prototype.send = function(msg) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
module.exports.Node = Node;
|
||||
|
||||
Node.prototype.receive = function(msg) {
|
||||
|
Loading…
Reference in New Issue
Block a user