Binary Star Reactor
Binary Star is useful and generic enough to package up as a reusable reactor class. The reactor then runs and calls our code whenever it has a message to process. This is much nicer than copying/pasting the Binary Star code into each server where we want that capability.
In C, we wrap the CZMQ zloop
class that we saw before. zloop
lets
you register handlers to react on socket and timer events. In the Binary
Star reactor, we provide handlers for voters and for state changes
(active to passive, and vice versa). Here is the bstar
API:
// Create a new Binary Star instance, using local (bind) and
// remote (connect) endpoints to set up the server peering
bstar_t
*
bstar_new
(
int
primary
,
char
*
local
,
char
*
remote
);
// Destroy a Binary Star instance
void
bstar_destroy
(
bstar_t
**
self_p
);
// Return underlying zloop reactor, for timer and reader
// registration and cancelation
zloop_t
*
bstar_zloop
(
bstar_t
*
self
);
// Register voting reader
int
bstar_voter
(
bstar_t
*
self
,
char
*
endpoint
,
int
type
,
zloop_fn
handler
,
void
*
arg
);
// Register main state change handlers
void
bstar_new_active
(
bstar_t
*
self
,
zloop_fn
handler
,
void
*
arg
);
void
bstar_new_passive
(
bstar_t
*
self
,
zloop_fn
handler
,
void
*
arg
);
// Start the reactor, which ends if a callback function returns -1,
// or the process received SIGINT or SIGTERM
int
bstar_start
(
bstar_t
*
self
);
The class implementation is in Example 4-68.
Example 4-68. Binary Star core class (bstar.c)
/* ===================================================================== ...
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.