Created
August 17, 2013 23:34
-
-
Save dkrikun/6259172 to your computer and use it in GitHub Desktop.
ZMQ_CONFLATE use-case demo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Copyright (c) 2007-2013 Contributors as noted in the AUTHORS file | |
This file is part of 0MQ. | |
0MQ is free software; you can redistribute it and/or modify it under | |
the terms of the GNU Lesser General Public License as published by | |
the Free Software Foundation; either version 3 of the License, or | |
(at your option) any later version. | |
0MQ is distributed in the hope that it will be useful, | |
but WITHOUT ANY WARRANTY; without even the implied warranty of | |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
GNU Lesser General Public License for more details. | |
You should have received a copy of the GNU Lesser General Public License | |
along with this program. If not, see <http://www.gnu.org/licenses/>. | |
*/ | |
#include "../include/zmq.h" | |
#include "../include/zmq_utils.h" | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <unistd.h> | |
int main (int argc, char *argv []) | |
{ | |
const char *bind_to; | |
int conflate = 1; | |
void *ctx; | |
void *s; | |
int rc; | |
zmq_msg_t msg; | |
if (argc < 3) { | |
printf ("usage: local_conflate <bind-to> <is-conflate>\n"); | |
return 1; | |
} | |
bind_to = argv [1]; | |
conflate = atoi (argv [2]); | |
ctx = zmq_init (1); | |
if (!ctx) { | |
printf ("error in zmq_init: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
s = zmq_socket (ctx, ZMQ_DEALER); | |
if (!s) { | |
printf ("error in zmq_socket: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
zmq_setsockopt (s, ZMQ_CONFLATE, &conflate, sizeof(conflate)); | |
int rcvtimeo = -1; | |
zmq_setsockopt (s, ZMQ_RCVTIMEO, &rcvtimeo, sizeof(rcvtimeo)); | |
rc = zmq_bind (s, bind_to); | |
if (rc != 0) { | |
printf ("error in zmq_bind: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
rc = zmq_msg_init (&msg); | |
if (rc != 0) { | |
printf ("error in zmq_msg_init: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
for (;;) { | |
int payload = 0; | |
rc = zmq_recv(s, (void*)&payload, sizeof(int), 0); | |
if (rc < 0) { | |
printf ("error in zmq_recvmsg: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
// do some work dependent on received data, the | |
// result produced must be based on the most up-to-date data | |
zmq_sleep(1); | |
printf("payload=%d\n", payload); | |
} | |
rc = zmq_msg_close (&msg); | |
if (rc != 0) { | |
printf ("error in zmq_msg_close: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
usleep(10000); | |
rc = zmq_close (s); | |
if (rc != 0) { | |
printf ("error in zmq_close: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
rc = zmq_term (ctx); | |
if (rc != 0) { | |
printf ("error in zmq_term: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
return 0; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Copyright (c) 2007-2013 Contributors as noted in the AUTHORS file | |
This file is part of 0MQ. | |
0MQ is free software; you can redistribute it and/or modify it under | |
the terms of the GNU Lesser General Public License as published by | |
the Free Software Foundation; either version 3 of the License, or | |
(at your option) any later version. | |
0MQ is distributed in the hope that it will be useful, | |
but WITHOUT ANY WARRANTY; without even the implied warranty of | |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
GNU Lesser General Public License for more details. | |
You should have received a copy of the GNU Lesser General Public License | |
along with this program. If not, see <http://www.gnu.org/licenses/>. | |
*/ | |
#include "../include/zmq.h" | |
#include "../include/zmq_utils.h" | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <unistd.h> | |
int main (int argc, char *argv []) | |
{ | |
const char *connect_to; | |
int roundtrip_count; | |
void *ctx; | |
void *s; | |
int rc; | |
int i; | |
zmq_msg_t msg; | |
int conflate = 0; | |
if (argc != 4) { | |
printf ("usage: remote_conflate <connect-to> <roundtrip-count> <is-conflate>\n"); | |
return 1; | |
} | |
connect_to = argv [1]; | |
roundtrip_count = atoi (argv [2]); | |
conflate = atoi (argv [3]); | |
ctx = zmq_init (1); | |
if (!ctx) { | |
printf ("error in zmq_init: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
s = zmq_socket (ctx, ZMQ_DEALER); | |
if (!s) { | |
printf ("error in zmq_socket: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
zmq_setsockopt (s, ZMQ_CONFLATE, &conflate, sizeof(conflate)); | |
rc = zmq_connect (s, connect_to); | |
if (rc != 0) { | |
printf ("error in zmq_connect: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
int message_size = sizeof(int); | |
rc = zmq_msg_init_size (&msg, message_size); | |
if (rc != 0) { | |
printf ("error in zmq_msg_init_size: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
memset (zmq_msg_data (&msg), 0, message_size); | |
int payload = 0; | |
for (i = 0; i != roundtrip_count; i++) { | |
payload = i; | |
rc = zmq_send (s, (void*)(&payload), message_size, 0); | |
if (rc < 0) { | |
printf ("error in zmq_sendmsg: %d %s\n", errno, zmq_strerror (errno)); | |
return -1; | |
} | |
usleep(10000); | |
} | |
rc = zmq_msg_close (&msg); | |
if (rc != 0) { | |
printf ("error in zmq_msg_close: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
rc = zmq_close (s); | |
if (rc != 0) { | |
printf ("error in zmq_close: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
rc = zmq_term (ctx); | |
if (rc != 0) { | |
printf ("error in zmq_term: %s\n", zmq_strerror (errno)); | |
return -1; | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment