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-openso 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