FSharp binding for NetMQ


Keywords
NetMQ, ZeroMQ, zmq
License
MPL-2.0
Install
Install-Package FsNetMQ -Version 0.5.0-pre

Documentation

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 router

Poller

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 poller

Actor

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