Main Thread:
- create context
(zmq/context 1)
- create workers and pass them the context
- start the worker threads
- addShutdownHook
- shutdown the worker threads
- join the worker threads
- sleep 2s ;; without this line the terminate context sometimes hangs, with it so far it has never hung
- terminate the context
(.term context)
;; sometimes hangs here
Worker Thread:
- Use the context to create some sockets
- sockets are created using
with-open
so they get auto closed - sockets have their linger value set to 100ms
- sockets are created using
- Use context to create poller
(zmq/poller context 1)
- Register main receive socket with poller
(zmq/register poller client :pollin)
- Loop, poll for data on main receive socket, timeout then loop
- If the shutdown flag is set, then
- unregister main receive socket from poller
(zmq/unregister poller client)
- close all the sockets that we created - actually get autoclosed from
with-open
- unregister main receive socket from poller
- done