blob: 31d225b5cbb4258f5da3031b6cf32556b762f51c [file] [log] [blame]
---
layout: default
---
:source-highlighter: coderay
:icons: font
include::banner.adoc[]
== Pipeline (A One-Way Pipe)
image::pipeline.png[A One-Way Pipe]
This pattern is useful for solving producer/consumer problems, including
load-balancing. Messages flow from the push side to the pull side. If
multiple peers are connected, the pattern attempts to distribute fairly.
.pipeline.c
[source,C]
----
include::src/pipeline.c[]
----
<1> Blithely assumes message is ASCIIZ string. Real code should check it.
.Compilation
[source,bash]
----
gcc pipeline.c -lnanomsg -o pipeline
----
.Execution
[source,bash]
----
./pipeline node0 ipc:///tmp/pipeline.ipc & node0=$! && sleep 1
./pipeline node1 ipc:///tmp/pipeline.ipc "Hello, World!"
./pipeline node1 ipc:///tmp/pipeline.ipc "Goodbye."
kill $node0
----
.Output
----
NODE1: SENDING "Hello, World!"
NODE0: RECEIVED "Hello, World!"
NODE1: SENDING "Goodbye."
NODE0: RECEIVED "Goodbye."
----