рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!
рдореИрдВ "ZeroMQ.Use ZeroMQ рдкреБрд╕реНрддрдХ рдХрд╛
рдореБрдлреНрдд рдЕрдиреБрд╡рд╛рдж рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВ рдФрд░ рд╕реАрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджреЗрд╢ рдкреИрдЯрд░реНрди рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ"ред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдЗрддрдиреА рджреЗрд░ рддрдХ рдЕрдЧрд▓реА рдХрдбрд╝реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХреА, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ: "рдЖрд▓рд╕реНрдп рд╣рдорд╛рд░реЗ рдЖрдЧреЗ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ ..."ред рдЕрдЪреНрдЫрд╛, рдЪрд▓реЛ рдЧреАрдд рдХреЛ рдЕрд▓рдЧ рд░рдЦреЗрдВред
рд╕рд╛рдордЧреНрд░реА
- рдЕрдзреНрдпрд╛рдп 1: рдЖрд░рдВрдн рдХрд░рдирд╛
- рдЕрдзреНрдпрд╛рдп 2: рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдкрд░рд┐рдЪрдп
- рдЕрдзреНрдпрд╛рдп 3: рд╕реЙрдХреЗрдЯ рдЯреЛрдкреЛрд▓реЙрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
- рдЕрдзреНрдпрд╛рдп 4: рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрдЯрд░реНрди
рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ ZeroMQ рдХреА рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕рдореЗрдВ рд╣рдо рд╕реЙрдХреЗрдЯреНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:
- рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдкреИрдЯрд░реНрди (рдкреНрд░рдХрд╛рд╢рд┐рдд-рд╕рджрд╕реНрдпрддрд╛)
- рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкреИрдЯрд░реНрди
рдкреНрд░рдХрд╛рд╢рди-рд╕рджрд╕реНрдпрддрд╛ рдкреИрдЯрд░реНрди
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдкреИрдЯрд░реНрди, рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдкреИрдЯрд░реНрди (рдкрдмреНрд▓рд┐рд╢-рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди) рдХреЛ рдкреЗрд╢ рдХрд░реЗрдВ, рдЬреЛ рд╡рд┐рддрд░рдг рдХреА рдкреНрд░рдХреГрддрд┐ рдХрд╛ рдПрдХрддрд░рдлрд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬрдм рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реВрдЪреА рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕реЗ рдХрдИ рдореЙрдбрд▓ рд╣реИред рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдЬреБрдбрд╝реЗ рд╣реБрдП рдЧреНрд░рд╛рд╣рдХ рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдЧреНрд░рд╛рд╣рдХ рдмрд╕ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рд╕рд░реНрд╡рд░ рд╢рд┐рдерд┐рд▓ рд░реВрдк рд╕реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЧреНрд░рд╛рд╣рдХ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдЯреЗрд▓реАрд╡рд┐рдЬрди рдЪреИрдирд▓реЛрдВ рдпрд╛ рд░реЗрдбрд┐рдпреЛ рд╕реНрдЯреЗрд╢рдиреЛрдВ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред рдЯреАрд╡реА рдЪреИрдирд▓ рд╣рдореЗрд╢рд╛ рдЯреЗрд▓реАрд╡рд┐рдЬрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рдкреНрд░рд╕рд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рджрд░реНрд╢рдХ рд╣реА рдЗрд╕ рдкреНрд░рд╕рд╛рд░рдг рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдЖрдк рд╕рд╣реА рд╕рдордп рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдирд╛ рдкрд╕рдВрджреАрджрд╛ рдЯреАрд╡реА рд╢реЛ рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗ (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ TiVo рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдРрд╕реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдкреНрд░рдХрд╛рд╢рд┐рдд-рд╕рджрд╕реНрдпрддрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдЯреЛрдкреЛрд▓реЙрдЬреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдореЙрдбрд▓ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрдЦреНрдп рдкрд╣рд▓реБрдУрдВ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдкреНрд░рдХрд╛рд╢рд┐рдд: рдкреЛрд╕реНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
- рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ: рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рд╕рджрд╕реНрдпрддрд╛: рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдПрдХ рдирдпрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд: рдЧреНрд░рд╛рд╣рдХ рдореМрдЬреВрджрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣рдЯрд╛рддрд╛ рд╣реИ
рдЖрдЗрдП рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╣рдо рд╕реНрдЯреЙрдХ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рджрд▓рд╛рд▓ рд╣реИрдВ, рдФрд░ рд╡реЗ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдмрд╛рдЬрд╛рд░ рдореЗрдВ рдХреНрдпрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реЛ рд░рд╣реА рд╣реИред рд╣рдорд╛рд░рд╛ рд╕рд░реНрд╡рд░ рд╕реНрдЯреЙрдХ рдорд╛рд░реНрдХреЗрдЯ рд╣реЛрдЧрд╛, рдФрд░ рджрд▓рд╛рд▓ рдЧреНрд░рд╛рд╣рдХ рд╣реЛрдВрдЧреЗред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢реЗрдпрд░ рдмрд╛рдЬрд╛рд░ рдХреА рдХреАрдорддреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдмрд╕ рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред
рдХрд┐рд╕реА рднреА рдХреЛрдб рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрд╣рд▓реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдореЙрдбрд▓ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрдорд╛рддрд╛ (рд╕рд░реНрд╡рд░) рдХрд╛ рдХреЛрдб рд╣реИ:
#include <string.h> #include "zmq.h" int main (int argc, char const *argv[]) { void* context = zmq_ctx_new(); void* publisher = zmq_socket(context, ZMQ_PUB); printf("Starting server...\n"); int conn = zmq_bind(publisher, "tcp://*:4040"); const char* companies[2] = {"Company1", "Company2"}; int count = 0; for(;;) { int price = count % 2; int which_company = count % 2; int index = strlen(companies[0]); char update[12]; snprintf(update, sizeof update, "%s", companies[which_company]); zmq_msg_t message; zmq_msg_init_size(&message, index); memcpy(zmq_msg_data(&message), update, index); zmq_msg_send(&message, publisher, 0); zmq_msg_close(&message); count++; } zmq_close(publisher); zmq_ctx_destroy(context); return 0; }
рдиреАрдЪреЗ рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб рд╣реИ:
#include <stdlib.h> #include <string.h> #include "zmq.h" int main (int argc, char const *argv[]) { void* context = zmq_ctx_new(); void* subscriber = zmq_socket(context, ZMQ_SUB); printf("Collecting stock information from the server.\n"); int conn = zmq_connect(subscriber, "tcp://localhost:4040"); conn = zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, 0, 0); int i; for(i = 0; i < 10; i++) { zmq_msg_t reply; zmq_msg_init(&reply); zmq_msg_recv(&reply, subscriber, 0); int length = zmq_msg_size(&reply); char* value = malloc(length); memcpy(value, zmq_msg_data(&reply), length); zmq_msg_close(&reply); printf("%s\n", value); free(value); } zmq_close(subscriber); zmq_ctx_destroy(context); return 0; }
рдЬрдм рднреА рдЖрдк SUB рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ
zmq_setsockopt ()
рдФрд░
subscribeis
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рдХреЛрдИ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА рд╣реИред
рдЧреНрд░рд╛рд╣рдХ рдХрд┐рд╕реА рднреА рд╕рдВрджреЗрд╢ рдХреЛ рдХрдИ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЕрджреНрдпрддрди рдХрд┐рд╕реА рднреА рд╕рджрд╕реНрдпрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рд╡рд╣ рдХреБрдЫ рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рдордирд╛ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рджрд╕реНрдпрддрд╛ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рд╣реЛрддреА рд╣реИред
рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ
zmq_msg_recv
() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
zmq_msg_recv
() рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрдЪрд╛рддрд╛ рд╣реИред рдкрд┐рдЫрд▓рд╛ рд╕рдВрджреЗрд╢, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рдЕрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
int zmq_msg_recv (zmq_msg_t *msg, void *socket, int flags);
рд╡рд┐рдХрд▓реНрдк рдзреНрд╡рдЬ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рд▓реЗ рд╕рдХрддрд╛ рд╣реИ -
ZMQ_DONTWAIT
ред рдпрджрд┐ рдЭрдВрдбрд╛
ZMQ_DONTWAIT
, рддреЛ рдСрдкрд░реЗрд╢рди рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ
zmq_msg_recv
() рд╕рдВрджреЗрд╢ рдХрд╛ рдЖрдХрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ -1 рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдзреНрд╡рдЬ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред
рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдореЙрдбрд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ рдФрд░
SUB
рд╕реЙрдХреЗрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред рдЖрдк рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП
zmq_msg_send
() рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ PUB рд╕реЙрдХреЗрдЯ рдкрд░
zmq_msg_recv
() рдХрднреА рдирд╣реАрдВ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
Company2 570 Company2 878 Company2 981 Company2 783 Company1 855 Company1 524 Company2 639 Company1 984 Company1 158 Company2 145
рд╕рд░реНрд╡рд░ рд╣рдореЗрд╢рд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛, рднрд▓реЗ рд╣реА рдЧреНрд░рд╛рд╣рдХ рди рд╣реЛрдВред рдЖрдк рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреБрдЫ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
Sending... Company2 36 Sending... Company2 215 Sending... Company2 712 Sending... Company2 924 Sending... Company2 721 Sending... Company1 668 Sending... Company2 83 Sending... Company2 209 Sending... Company1 450 Sending... Company1 940 Sending... Company1 57 Sending... Company2 3 Sending... Company1 100 Sending... Company2 947
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо Company1 рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдЖрдк рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:
рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдирд┐рдореНрди рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛрдЧрд╛:
Company1 575 Company1 504 Company1 513 Company1 584 Company1 444 Company1 1010 Company1 524 Company1 963 Company1 929 Company1 718
рд╕рдВрджреЗрд╢ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ
рд╣рдорд╛рд░рд╛ рдореБрдЦреНрдп рд╕реНрдЯреЙрдХ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╕рдВрджреЗрд╢ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд╣реИ рдирд╛? рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдирд╣реАрдВред
рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХреЛрдб рдХреЛ рдирд┐рдореНрди рдореЗрдВ рдмрджрд▓реЗрдВ:
рдЕрдм рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб рдХреЛ рдирд┐рдореНрди рдореЗрдВ рдмрджрд▓реЗрдВ:
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдЙрдЯрдкреБрдЯ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛:
Collecting stock information from the server. Company101 950 Company10 707 Company101 55 Company101 343 Company10 111 Company1 651 Company10 287 Company101 8 Company1 889 Company101 536
рд╣рдорд╛рд░рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрдВрдкрдиреА 1 рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рд░реНрд╡рд░ рдлрд┐рд░ рд╕реЗ рд╣рдореЗрдВ Company10 рдФрд░ Company101 рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рднреЗрдЬрддрд╛ рд╣реИред рдпрд╣, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЗрд╕ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдереЛрдбрд╝рд╛ рд╣реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рд╣реИред
рд╣рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛрдб рджреЛрдиреЛрдВ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдо рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВрдЧреЗред
рдиреАрдЪреЗ рдЕрджреНрдпрддрди рд╕рд░реНрд╡рд░ рдХреЛрдб рд╣реИ рдЬреЛ рдкрд┐рдЫрд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХреА рдЧрдИ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рд╡реЗ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд╛рдЬрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛрдб рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдо рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдереЗред
рд╕реЙрдХреЗрдЯ рд╡рд┐рдХрд▓реНрдк
рдЪреВрдВрдХрд┐ рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо
ZMQ_SUBSCRIBE
рдирд╛рдордХ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ
ZMQ_SUBSCRIBE
ред
int conn = zmq_connect(subscriber, "tcp://localhost:4040"); conn = zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, option_value, strlen(option_value));
рд╕реЙрдХреЗрдЯ рд╡рд┐рдХрд▓реНрдк zmq_setsockopt () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣ рдЪрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ:
- рд╕реЙрдХреЗрдЯ
- рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдирд╛рдо
- рд╡рд┐рдХрд▓реНрдк рдорд╛рди
- рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЖрдХрд╛рд░
рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
int zmq_setsockopt (void *socket, int option_name, const void *option_ value, size_t option_len);
рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ
ZMQ_SUBSCRIBE
ZMQ_SUB
рд╕реЙрдХреЗрдЯ рдкрд░ рдПрдХ рдирдпрд╛ рд╕рдВрджреЗрд╢ рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐
option_value
рддрд░реНрдХ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдЙрди рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ
option_value
рд╢реБрд░реВ
option_value
ред рдЖрдк рдПрдХ
ZMQ_SUB
рд╕реЙрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдХрдИ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд░реЗрдВ
ZMQ_UNSUBSCRIBE
ZMQ_SUB
рд╕реЙрдХреЗрдЯ рд╕реЗ рд╕рдВрджреЗрд╢ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдХрдИ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реЛрдВред
рдореБрдЦреНрдп рдмрд╛рдд рдЬреЛ рд╣рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдиреА рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЧреНрд░рд╛рд╣рдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ рддреЛ рд╣рдореЗрдВ рдХрднреА рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╣рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рдлрд┐рд░ рд╕рд░реНрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣рдореЗрд╢рд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЛ рдорд╛рдирддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдЗрд╕ рд╕рдордп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдореЙрдбрд▓ рдиреЛрдЯ
рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдореЙрдбрд▓ рдореЗрдВ, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдпрджрд┐ рдЖрдк рдЯреАрд╕реАрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрджреЗрд╢ рд╕рд░реНрд╡рд░ рдХреА рдУрд░ рдкрдВрдХреНрддрд┐рдмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреА рдзреАрд░реЗ-рдзреАрд░реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред
- рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдирд┐рд╖реНрдкрдХреНрд╖-рдХрддрд╛рд░ рдХреА рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
- рд╕рд░реНрд╡рд░ рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рднреА рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ, рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдорд╛рд░реНрдХреЗрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдЕрдзреНрдпрд╛рдп 4 рдореЗрдВ, рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдореЙрдбрд▓ рдкрд░ рд▓реМрдЯ рдЖрдПрдВрдЧреЗ, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рджрд┐рдЦрд╛рдПрдВрдЧреЗ рдХрд┐ "рдзреАрдореА" рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВред
рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкреИрдЯрд░реНрди
рдЪрд▓реЛ рдЬрд╛рд░реА рд░рдЦреЗрдВ, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЙрдбрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкреИрдЯрд░реНрди рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдЖрджреЗрд╢рд┐рдд рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдбреЗрдЯрд╛ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдкрд╛рдЗрдк рдХрдИ рдиреЛрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ, рдПрдХ рдЪрдХреНрд░реАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдИ рдЕрдиреБрд░реЛрдз-рдкреНрд░рддрд┐рд╕рд╛рдж рдореЙрдбрд▓ рдЬреИрд╕рд╛ рд╣реИред
рд╡рд┐рднрд╛рдЬрди рдХрд░реЗрдВ рдФрд░ рд░рдгрдиреАрддрд┐ рдХреЛ рдЬреАрддреЗрдВ
рдЗрд╕ рд░рдгрдиреАрддрд┐ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдФрд░ рдЬреАрддреЗрдВ, рдЬрдм рдЖрдк рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреЛрдИ рдмрдЪ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ, рдЬрдм рдЖрдк рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рдереЗ, рдФрд░ рдЖрдкрдХреЗ рд╢рд┐рдХреНрд╖рдХ рдиреЗ рдЗрд╕реЗ рд▓рдЧрднрдЧ рдорд░реНрдЬ рдХреА рдЫрдБрдЯрд╛рдИ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдПрдХ рд╣рдлреНрддреЗ рдХреЗ рдмрд╛рдж рд╕рдореВрд╣ рдХреЗ рдЖрдзреЗ рд▓реЛрдЧреЛрдВ рдиреЗ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╛рдж рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ, рд╡рд┐рднрд╛рдЬрд┐рдд рдФрд░ рдЬреАрдд!
ZeroMQ рдкрд░ рдХреБрдЫ рд╕рдорд╛рдирд╛рдВрддрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЬрдирд░реЗрдЯрд░ рд╣реИ рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реЗ рд╢реНрд░рдорд┐рдХ рд╣реИрдВ рдЬреЛ рдиреНрдпреВрдЯрди рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдЧрдореВрд▓ рдЬреНрдЮрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд▓реЗрдХреНрдЯрд░ рднреА рд╣реИ рдЬреЛ рд╢реНрд░рдорд┐рдХреЛрдВ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИред
рдиреАрдЪреЗ рд╕рд░реНрд╡рд░ рдХреЛрдб рд╣реИ:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/time.h> #include <time.h> #include "zmq.h" int main (int argc, char const *argv[]) { void* context = zmq_ctx_new(); // This is the socket that we send messages. void* socket = zmq_socket(context, ZMQ_PUSH); zmq_bind(socket, "tcp://*:4040"); // This is the socket that we send batch message. void* connector = zmq_socket(context, ZMQ_PUSH); zmq_connect(connector, "tcp://localhost:5050"); printf("Please press enter when workers are ready..."); getchar(); printf("Sending tasks to workers...\n"); // The first message. It's also the signal start of batch. int length = strlen("-1"); zmq_msg_t message; zmq_msg_init_size(&message, length); memcpy(zmq_msg_data(&message), "-1", length); zmq_msg_send(&message, connector, 0); zmq_msg_close(&message); // Generate some random numbers. srandom((unsigned) time(NULL)); // Send the tasks. int count; int msec = 0; for(count = 0; count < 100; count++) { int load = (int) ((double) (100) * random () / RAND_MAX); msec += load; char string[10]; sprintf(string, "%d", load); } printf("Total: %d msec\n", msec); sleep(1); zmq_close(connector); zmq_close(socket); zmq_ctx_destroy(context); return 0; }
рд╣рдо рдХрд░реНрдордЪрд╛рд░реА рдХреЛрдб рдкрд░ рднреА рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╣рдо рдиреНрдпреВрдЯрди рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╡рд░реНрдЧрдореВрд▓ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЧрдгрдирд╛рдПрдБ рдХрд░рддреЗ рд╣реИрдВ:
#include <stdlib.h> #include <string.h> #include <unistd.h> #include "zmq.h" double square(double x) { return x * x; } double average(double x, double y) { return (x + y) / 2.0; } double good_enough(double guess, double x) { return abs(square(guess) - x) < 0.000001; } double improve(double guess, double x) { return average(guess, x / guess); } double sqrt_inner(double guess, double x) { if(good_enough(guess, x)) return guess; else return sqrt_inner(improve(guess, x), x); } double newton_sqrt(double x) { return sqrt_inner(1.0, x); } int main (int argc, char const *argv[]) { void* context = zmq_ctx_new(); // Let's initialize a socket to receive messages. void* receiver = zmq_socket(context, ZMQ_PULL); zmq_connect(receiver, "tcp://localhost:4040"); // Let's initialize a socket to send the messages. void* sender = zmq_socket(context, ZMQ_PUSH); zmq_connect(sender, "tcp://localhost:5050"); for(;;) { zmq_msg_t reply; zmq_msg_init(&reply); zmq_msg_recv(&reply, receiver, 0); int length = zmq_msg_size(&reply); char* msg = malloc(length + 1); memcpy(msg, zmq_msg_data(&reply), length); zmq_msg_close(&reply); fflush(stdout); double val = atof(msg); printf("%.1f: %.1f\n", val, newton_sqrt(val)); sleep(1); free(msg); zmq_msg_t message; char* ssend = "T"; int t_length = strlen(ssend); zmq_msg_init_size(&message, t_length); memcpy(zmq_msg_data(&message), ssend, t_length); zmq_msg_send(&message, receiver, 0); zmq_msg_close(&message); } zmq_close(receiver); zmq_close(sender); zmq_ctx_destroy(context); return 0; }
рдпрд╣рд╛рдБ рдХреЛрдб рдФрд░ рдХрд▓реЗрдХреНрдЯрд░ рд╣реИ:
#include <stdlib.h> #include <string.h> #include "zmq.h" int main (int argc, char const *argv[]) { void* context = zmq_ctx_new(); void* receiver = zmq_socket(context, ZMQ_PULL); zmq_bind(receiver, "tcp://*:5050"); // We receive the first message and discard it since it's the // signal start of batch which is -1. zmq_msg_t reply; zmq_msg_init(&reply); zmq_msg_recv(&reply, receiver, 0); int length = zmq_msg_size(&reply); char* msg = malloc(length + 1); memcpy(msg, zmq_msg_data(&reply), length); zmq_msg_close(&reply); free(msg); int count; for(count = 0; count < 100; count++) { zmq_msg_t reply; zmq_msg_init(&reply); zmq_msg_recv(&reply, receiver, 0); int length = zmq_msg_size(&reply); char* value = malloc(length + 1); memcpy(value, zmq_msg_data(&reply), length); zmq_msg_close(&reply); free(value); if(count / 10 == 0) printf("10 Tasks have been processed."); fflush(stdout); } zmq_close(receiver); zmq_ctx_destroy(context); return 0; }
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рдКрдкрд░ рд▓рд┐рдЦреЗ рдХреЛрдб рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ:

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ:
- рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЙрд╕ рд╕рдордп рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрдм рдХрд░реНрдордЪрд╛рд░реА рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓рд╛ рдХрд░реНрдордЪрд╛рд░реА рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдХрдиреЗрдХреНрд╢рди рдЪрд░рдг рдореЗрдВ рд╣реИрдВред рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рдо рдХрд░реЗред
- рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рдкреВрд░реНрдг рд╕реЙрдХреЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдирд┐рд╖реНрдкрдХреНрд╖ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рд╣рдордиреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА)
- PUSH рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдХрд╛рд░реНрдп рднреЗрдЬрддрд╛ рд╣реИ
- рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕рд░реНрд╡рд░ рдФрд░ рдХрд▓реЗрдХреНрдЯрд░ рджреЛрдиреЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдордиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕рд░реНрд╡рд░ рдФрд░ рдХрд▓реЗрдХреНрдЯрд░ рджреЛрдиреЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВред рдЖрдЗрдП рдЗрди рд▓рд┐рдВрдХ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВред
рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдХрд░реНрдордЪрд╛рд░реА рдХреЛрдб рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:
ZMQ_PULL рд╕реЙрдХреЗрдЯ
рдЬрдм рд╣рдо рдЗрдирдкреБрдЯ рд╕реЗ рдиреЛрдбреНрд╕ рддрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо
ZMQ_PULL
рдЙрдкрдпреЛрдЧ
ZMQ_PULL
ред рд╕реЙрдХреЗрдЯ рдкреНрд░рдХрд╛рд░
ZMQ_PULL
рдЙрдкрдпреЛрдЧ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдиреЛрдбреНрд╕ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рд╖реНрдкрдХреНрд╖ рдХрддрд╛рд░ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИред
ZMQ_PUSH рд╕реЙрдХреЗрдЯ
рдЬрдм рд╣рдо рдирд┐рдЪрд▓реЗ рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо
ZMQ_PUSH
рдЙрдкрдпреЛрдЧ
ZMQ_PUSH
ред рд╕реЙрдХреЗрдЯ рдкреНрд░рдХрд╛рд░
ZMQ_PUSH
рдЙрдкрдпреЛрдЧ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдирд┐рдореНрди рдиреЛрдбреНрд╕ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
ZMQ_PUSH
рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдХрднреА рдирд╣реАрдВ
ZMQ_PUSH
ред рдпрджрд┐ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдиреЛрдб рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдиреЛрдб рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рд╡рд╛рд▓рд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ
zmq_send
() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬреЗ рдЧрдП рд╕рднреА рд╕рдВрджреЗрд╢ рддрдм рддрдХ рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдПрдХ рдиреЛрдб рдЙрдкрд▓рдмреНрдз рди рд╣реЛред
ZeroMQ рдкреНрд░рд╕рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдкрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдкрд╣рд▓реЗ рджрд┐рдП рдЧрдП рд╕рднреА рдЙрджрд╛рд╣рд░рдг zmq_ctx_new () рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдереЗред ZeroMQ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣рдореЗрд╢рд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдХрд░ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред рд╕рднреА рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рд╕рдВрджрд░реНрдн рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднреАрддрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕реЙрдХреЗрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рд╣реИред ZeroMQ рд╕рдВрджрд░реНрдн рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ ZeroMQ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ NULL рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЖрдк рдХрдИ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ ZeroMQ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдПрдХ рд╕рдВрджрд░реНрдн рдмрдирд╛рдирд╛ рдФрд░ рдЗрд╕реЗ рдЕрдиреНрдп рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред
ZeroMQ рдкреНрд░рд╕рдВрдЧ рд╡рд┐рдирд╛рд╢рдХ
рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ
zmq_ctx_destroy
() рдХреЙрд▓ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рд╣реИред
zmq_ctx_destroy
() рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕ рдПрдХ рдПрд░рд░ рдХреЛрдб (
ETERM
),
zmq_ctx_destroy
() рдмреНрд▓реЙрдХ рдХреЛ рд╕реЙрдХреЗрдЯ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░
zmq_close
() рдХреЙрд▓ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред
рд╕рдлрд╛рдИ
рдЬрдм рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рдпрдерди рдпрд╛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕реНрдореГрддрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрдерди рд╕рдВрджрд░реНрдн рдЧрд┐рдирддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдХрд╛рдЙрдВрдЯрд░ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЗрдореЛрд░реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореБрдХреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд┐рд╣рдЯрди рдореЗрдВ ZeroMQ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрддреЗ рд╕рдордп рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдЧрдгрдирд╛ рдХреЗ рд╢реВрдиреНрдп рд╣реЛрддреЗ рд╣реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ Jython, PyPy, рдпрд╛ IronPython рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╡реИрд╕реЗ рднреА, рдЖрдк рдкрд╛рдпрдерди рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдпреЗ рдЕрдкрдиреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред
рдЬрдм рдЖрдк рд╕реА рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдореГрддрд┐ рдкреНрд░рдмрдВрдзрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдкрдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИред рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрд╕реНрдерд┐рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛрдЧреАред
рдЖрдкрдХреЛ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ, рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рд╕реНрд╡рдпрдВ ZeroMQ рд╕рдВрджрд░реНрдн рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрд╡реЗрджрди рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рддреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ
zmq_ctx_destroy
() рдкрд░ рдХреЙрд▓ рдХрд░рдХреЗ ZeroMQ рд╕рдВрджрд░реНрдн рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЦреБрд▓реА рдХреБрд░реНрд╕рд┐рдпрд╛рдВ тАЛтАЛрд╣реИрдВ, рддреЛ zmq_ctx_destroy
рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рдЙрдирдХреЗ рдмрдВрдж рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕рднреА рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рд╕рдВрджрд░реНрдн рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП zmq_ctx_destroy
() рдХреЙрд▓ рдХрд░реЗрдВред zmq_ctx_destroy
() рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рдЦреБрд▓рд╛ рдХрдиреЗрдХреНрд╢рди рд╣реИ рдпрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдореЗрдВ рд╕рдВрджреЗрд╢ рд╣реИрдВред- рдЬрдм рднреА рдЖрдк рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ
zmq_msg_close
() рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕реЗ рддреБрд░рдВрдд рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛрдЧреАред - рдХрдИ рдХреБрд░реНрд╕рд┐рдпрд╛рдВ тАЛтАЛрди рдЦреЛрд▓реЗрдВред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдХрд░ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдпрд╣ рдмрд╣реБрдкрд░рдд рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред
рдореЗрдореЛрд░реА рд▓реАрдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛
рд╕реА рдпрд╛ рд╕реА ++ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд┐рдд рдореЗрдореЛрд░реА рдореИрдиреЗрдЬрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Valgrind рдирд╛рдордХ рдПрдХ рдЕрджреНрднреБрдд рд▓рд┐рдирдХреНрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЗрдореЛрд░реА рд▓реАрдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛ рдЦрдВрдб рдПрдХ рдЫреЛрдЯрд╛ рд╡реИрд▓реЗрдЧреНрд░рд╛рдЗрдВрдб рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо ZeroMQ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрддреЗ рд╕рдордп Valgrind рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЗрд╕ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗред
рд╡реЗрд▓рдЧреНрд░рд┐рдВрдб рдХрд╛ рдкрд░рд┐рдЪрдп
рдЖрдк рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП тАУg рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рд╕рдЯреАрдХ рд▓рд╛рдЗрди рдирдВрдмрд░ рд╣реЛрдВрдЧреЗред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
#include <stdio.h> #include <stdlib.h> int main(int argc, char const *argv[]) { char* a = malloc(4); int b; printf("b = %d\n", b); return 0; }
gcc тАУg тАУo test test.c
рд▓рд┐рдЦрдХрд░
gcc тАУg тАУo test test.c
рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд
gcc тАУg тАУo test test.c
рдЕрдм рдореЗрдореЛрд░реА рд▓реАрдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Valgrind рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдЪрд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
valgrind --leak-check=full --show-reachable=yes test
рдкрд┐рдЫрд▓реА рдХрдорд╛рдВрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, Valgrind рдореЗрдордЪреЗрдХ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред рдЗрд╕реЗ рдЯреВрд▓ = рдореЗрдореНрдЪреЗрдХ рдЪрд▓рд╛рдХрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рддрдм рд╡реНрдпрд░реНрде рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореЗрдореНрдЪреЗрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреВрд▓ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рдирд┐рдореНрди рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛:
==98190== Conditional jump or move depends on uninitialised value(s) ==98190== at 0x2D923: __vfprintf ==98190== by 0x4AC5A: vfprintf_l ==98190== by 0x952BE: printf ==98190== by 0x1F5E: main (test.c:8) ==98190== 4 bytes in 1 blocks are definitely lost in loss record 1 of 5 ==98190== at 0xF656: malloc (vg_replace_malloc.c:195) ==98190== by 0x1F46: main (test.c:6) ==98190== LEAK SUMMARY: ==98190== definitely lost: 4 bytes in 1 blocks ==98190== indirectly lost: 0 bytes in 0 blocks ==98190== possibly lost: 0 bytes in 0 blocks
рдЕрдм рдкрд┐рдЫрд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдереЛрдбрд╝рд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
- рд╣рдо 98190 рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдИрдбреА рд╣реИ
Conditional jump or move depends on uninitialised value(s)
рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рд╕рдлрд▓ рд░рд╣рд╛ рдерд╛definitely lost
рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдИ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИindirectly lost
рдПрдХ рдмреНрд▓реЙрдХ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдЬреЛ рдЦреЛ рд╕рдХрддрд╛ рд╣реИpossibly lost
рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реИ
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Valgrind
$PREFIX/lib/valgrind/default.supp
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдореЗрдВ ZeroMQ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
{ <socketcall_sendto> Memcheck:Param socketcall.sendto(msg) fun:send ... } { <socketcall_sendto> Memcheck:Param socketcall.send(msg) fun:send ... }
рдлрд┐рд░ рд╣рдо Valgrind рдХреЛ рдЙрди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
valgrind --leak-check=full --show-reachable=yes --suppressions=zeromq.supp server
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рд╣рдордиреЗ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдореБрд▓рд╛рдХрд╛рдд рдХреА рдФрд░ рджреЛ рдирдП рдореЙрдбрд▓ рдкреЗрд╢ рдХрд┐рдП, рдЕрд░реНрдерд╛рддреН рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдореЙрдбрд▓ рдФрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкреИрдЯрд░реНрдиред рд╣рдордиреЗ рдЗрди рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХреА, рдФрд░ рдЗрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдпрд╛ред Valgrind.
, .