GitHub

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

Read the original on github.com ↗