-
Notifications
You must be signed in to change notification settings - Fork 11
Open
Description
Hi,
The code below is an simple example of push/pull pair with :streamer device, and the backend workers run in threads, everything is OK!
(ql:quickload :pzmq)
(ql:quickload :bordeaux-threads)
(defun streamer-device (front back)
(pzmq:with-sockets ((frontend :pull) (backend :push))
(pzmq:bind frontend front)
(pzmq:bind backend back)
(dotimes (i 2)
(pzmq:with-context nil
(bt:make-thread (lambda ()
(pzmq:with-socket recv :pull
(pzmq:connect recv back)
(loop (format t "Streamer pulled a msg: ~d" (pzmq:recv-string recv))))))))
(pzmq:device :streamer frontend backend)
;; Or use proxy
#+:ignore(pzmq:proxy frontend backend (cffi:null-pointer))))
(defun send-streamer (endpoint)
(pzmq:with-sockets ((sender :push))
(pzmq:connect sender endpoint)
(pzmq:send sender "hello")))
Tests with:
(bt:make-thread (lambda ()
(streamer-device "tcp://127.0.0.1:5558" "tcp://127.0.0.1:5559")))
(sleep 0.5)
(send-streamer "tcp://127.0.0.1:5558")
(bt:make-thread (lambda ()
(streamer-device "tcp://127.0.0.1:5561" "ipc://workers")))
(sleep 0.5)
(send-streamer "tcp://127.0.0.1:5561")
(bt:make-thread (lambda ()
(streamer-device "tcp://127.0.0.1:5560" "inproc://workers")))
(sleep 0.5)
(send-streamer "tcp://127.0.0.1:5560")
Metadata
Metadata
Assignees
Labels
No labels