4

NoFlo Components 文档提到了组,但没有解释它们的用途以及应该如何使用它们。

有人可以解释一下组在 NoFlo 中扮演什么角色,应该如何使用组和嵌套组以及它如何影响异步组件?

4

1 回答 1

3

组的概念在 FBP 书中被描述为“括号 IP”

基本上begingroupendgroup是特殊的数据包类型,它们指定在它们之间发送的数据包包含该组作为元数据。

有点像 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为它收到的每个请求生成一个唯一的组标识符。如果您在响应请求之前执行数据库查询或其他异步操作,则可以使用这些组在编写响应之前将结果合并回来。

于 2014-05-08T11:09:35.993 回答