FsNetMQ
Example
use router = Socket.router ()
router.bind socket "tcp://*:6566"
use dealer = Socket.dealer ()
Socket.connect socket "tcp://127.0.0.1:6566"
Frame.send dealer "Hello"B
let frame,more = Frame.recv routerPoller
Poller is using IObservable, so when ever you add a socket to the poller you get an observable which you can subscribe to be notified of new messages.
use poller = Poller.create ()
use dealer = Socket.dealer ()
use subscriber = Socker.sub ()
// Connecting and subscribing...
let dealerObservable =
Poller.addSocket poller dealer
|> Observable.map Frame.recv
let subObservable =
Poller.addSocket poller subscriber
|> Observable.map Frame.recv
use observer =
Observable.merge dealerObservable subObservable
|> Observable.subscribe (fun msg -> printfn "%A" msg)
Poller.run pollerActor
Actor is a thread with socket attached to it, so you are able to send it messages and request cancellation. Together with Poller it is a powerful concept.
// Actor is disposable, so whenever you call dispose on the actor the end message will be sent the thread will exit
let actor =
Actor.create (fun shim ->
use poller = Poller.create ()
// Registering for the end message which will cancel the actor
use emObserver = Poller.registerEndMessage poller shim
// Creating sockets and adding them to the poller
...
// Signalling that the actor is ready, this will let the Actor.create function to exit
Actor.signal shim
Poller.run poller

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
