A Real-Life Example
In the
âXPUB subscription notificationsâ email thread, Dan Goes asks how to make a publisher that knows when a new
client subscribes and sends out previous matching messages. Itâs a
standard pub-sub technique called âlast value caching.â Over a one-way
transport like pgm
(where subscribers literally send no
packets back to publishers), this canât be done. But over TCP, it can, if
we use an XPUB socket and if that socket didnât cleverly filter out
duplicate subscriptions to reduce upstream traffic.
Though Iâm not an expert contributor to libzmq
,
this seemed like a fun problem to solve. How hard could it be? I started
by forking the libzmq
repository to my own GitHub
account, and then cloned it to my laptop, where I built it:
Git clone git@github.com:hintjens/libzmq.git cd libzmq ./autogen.sh ./configure make
Because the libzmq
code is neat and well
organized, it was quite easy to find the main files to change
(xpub.cpp and xpub.hpp). Each
socket type has its own source file and class. They inherit from
socket_base.cpp, which has this hook for
socket-specific options:
// First, check whether specific socket type overloads the option. int rc = xsetsockopt (option_, optval_, optvallen_); if (rc == 0 || errno != EINVAL) return rc; // If the socket type doesn't support the option, pass it to // the generic option parser return options.setsockopt (option_, optval_, optvallen_);
Then I checked where the XPUB socket filters out duplicate subscriptions, in its ...
Get ZeroMQ now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.