NoFlo Components 文档提到了组,但没有解释它们的用途以及应该如何使用它们。
有人可以解释一下组在 NoFlo 中扮演什么角色,应该如何使用组和嵌套组以及它如何影响异步组件?
NoFlo Components 文档提到了组,但没有解释它们的用途以及应该如何使用它们。
有人可以解释一下组在 NoFlo 中扮演什么角色,应该如何使用组和嵌套组以及它如何影响异步组件?
组的概念在 FBP 书中被描述为“括号 IP”。
基本上begingroup
和endgroup
是特殊的数据包类型,它们指定在它们之间发送的数据包包含该组作为元数据。
有点像 XML:
<somegroup>
<innergroup>
data
</innergroup>
</somegroup>
在 NoFlo 中,这将适用于:
@outPorts.out.beginGroup 'somegroup'
@outPorts.out.beginGroup 'innergroup'
@outPorts.out.send "data"
@outPorts.out.endGroup()
@outPorts.out.endGroup()
begingroup
接收端口通过and事件获取这些信息,endgroup
并且可以对它们进行处理或忽略它们。对于不使用组但对信息包执行一些转换的组件,通常一个好的行为是至少将它们向前传递。
@inPorts.in.on 'begingroup', (group) =>
@outPorts.out.beginGroup group
@inPorts.in.on 'data', (data) =>
# do something and then send
@inPorts.in.on 'endgroup', =>
@outPorts.out.endGroup()
因此,组可以被视为为您的数据包提供一些“元数据”的一种方式。例如,当 NoFlofilesystem/ReadFile
将文件内容作为数据包发送出去时,它会用一个以文件路径命名的组围绕它。
组对于合并异步流也非常有用。例如,webserver/Server
为它收到的每个请求生成一个唯一的组标识符。如果您在响应请求之前执行数据库查询或其他异步操作,则可以使用这些组在编写响应之前将结果合并回来。