FBP와 NoFlo가 프로세스 관점에서 어떻게 작동하는지에 대해 많은 것을 배우고 있습니다. 그래서 내가 일을 함께 해킹 할 수는 있지만 문제를 다른 곳으로 가져 오는지 확신 할 수 없습니다.패킷을 전송하기 전에 모든 포트에서 입력을 대기하는 데 사용해야하는 접근법은 무엇입니까?
이 경우 출력 포트로 데이터를 보내기 전에 2 개의 포트 각각에서 입력을 기다리는 구성 요소를 만듭니다. 왜? 출력 패킷 (그룹 이름과 입력 패킷)을 구성하기 위해 두 입력의 데이터가 필요합니다.
나는 2 가지 접근법을 사용하여 이것을 달성 할 수 있었고 어떤 접근법이 더 나은지 또는 적어도 각 접근법의 위/아래를 알고 싶습니다.
내가 여기에 대해서 이야기하고 구성 요소가 vizicities/그룹이다 :
접근 방법 1 : 입력 2는 패킷
var noflo = require("noflo");
exports.getComponent = function() {
var AddGroup = new noflo.Component();
AddGroup.description = "This component adds a group to the data packets";
var packets = [];
var groupName = "";
// Register ports and event handlers
AddGroup.inPorts.add("in", { datatype: "all" }, function(event, payload) {
switch (event) {
case "begingroup":
AddGroup.outPorts.out.beginGroup(payload);
break;
case "endgroup":
AddGroup.outPorts.out.endGroup();
break;
case "data":
// Queue packet
packets.push(payload);
break;
case "disconnect":
// Only send output if group has been set
if (groupName) {
for (var i = 0; i < packets.length; i++) {
AddGroup.outPorts.out.beginGroup(groupName);
AddGroup.outPorts.out.send(packets);
AddGroup.outPorts.out.endGroup();
}
// Disconnect output port when input port disconnects
AddGroup.outPorts.out.disconnect();
}
break;
}
});
AddGroup.inPorts.add("group", { datatype: "string" }, function(event, payload) {
switch (event) {
case "begingroup":
break;
case "endgroup":
break;
case "data":
groupName = payload;
break;
case "disconnect":
// TODO: Does this dupe anything with the same logic on the in port?
// Only send output if group has been set
if (groupName) {
for (var i = 0; i < packets.length; i++) {
AddGroup.outPorts.out.beginGroup(groupName);
AddGroup.outPorts.out.send(packets);
AddGroup.outPorts.out.endGroup();
}
// Disconnect output port when input port disconnects
AddGroup.outPorts.out.disconnect();
}
break;
}
});
AddGroup.outPorts.add("out", { datatype: "all" });
return AddGroup; // Return new instance
};
을 받았다 입력 1에서 패킷을 큐 내부까지 접근법 2 : WirePattern 도우미 사용
var noflo = require("noflo");
exports.getComponent = function() {
var AddGroup = new noflo.Component();
AddGroup.description = "This component adds a group to the data packets";
var config = {
in: ["in", "group"],
out: "out"
};
AddGroup.inPorts = new noflo.InPorts({
in: {
datatype: "string",
required: true
},
group: {
datatype: "string",
required: true
}
});
AddGroup.outPorts = new noflo.OutPorts({
out: {
datatype: "all"
}
});
noflo.helpers.WirePattern(AddGroup, config, function(data, groups, outPort) {
outPort.beginGroup(data.group);
outPort.send(data.in);
outPort.endGroup();
});
// Return new instance
return AddGroup;
};
두 접근법이 모두 작동하는 것처럼 보이지만 분명히 다른 접근법을 사용해야합니다. 누군가 나를 위해 이것을 분명히 할 수 있습니까?
감사합니다. 앙리, 물건을 깨끗이합니다! WirePattern 버전도 훨씬 깔끔해서 나는 그 접근법을 선호했다. 현재 포트 및 매개 변수의 차이점을 이해하고 있지만 적어도 모든 기능을 갖추고 있습니다. –
매개 변수 포트는 구성 요소를 구성하는 데 사용됩니다. 그것들을'required'로 설정하면 WirePattern이 실행되기 전에 한 번 제공되어야하지만, 그 후에 값은'c.params '에 유지됩니다.'. 선택적 매개 변수 포트는 WirePattern 실행을 차단하지 않으므로 그래프 작성 방법에 따라 값이 달라 지거나 없을 수 있습니다. –
bergie