NoFlo组件文档提到了组,但没有解释它们用于什么以及应该如何使用它们。
有人能解释一下组在NoFlo中扮演什么角色,如何使用组和嵌套组,以及它如何影响异步组件吗?
发布于 2014-05-08 11:09:35
群的概念是在FBP书中被描述为“括号in”。
基本上,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()接收到的inport通过begingroup和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()因此,组可以被看作是为数据包提供一些“元数据”的一种方式。例如,NoFlo's当filesystem/ReadFile将文件的内容作为数据包发送出去时,它用一个以文件路径命名的组包围它。
组对于合并异步流也非常有用。例如,webserver/Server为它收到的每个请求生成一个唯一的组标识符。如果在响应请求之前执行数据库查询或其他异步操作,则可以在编写响应之前使用这些组将结果合并回。
https://stackoverflow.com/questions/23519877
复制相似问题