如何在NoFlo中使用组?

时间:2014-05-07 13:57:34

标签: noflo

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

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

1 个答案:

答案 0 :(得分:3)

群组的概念是described as "bracket IPs" in the FBP book

基本上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()

接收输入通过begingroupendgroup事件获取这些内容,可以对它们执行某些操作或忽略它们。通常,对不使用组但对信息包执行某些转换的组件的良好行为至少会将它们传递给它们。

@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()

因此,可以将群体视为提供某些元数据的方式&#34;为你的数据包。例如,当filesystem/ReadFile以文件包的形式发送文件的内容时,NoFlo会将其包围在一个以文件路径命名的组中。

组对于合并异步流也非常有用。例如,webserver/Server为每个获取的请求生成唯一的组标识符。如果在响应请求之前执行数据库查询或其他异步操作,则可以在编写响应之前使用这些组合并结果。