即使设置了主题,zmq pub sub 也不起作用
zmq pub sub does not work even when the topic is set
我正在尝试制作一个简单的 PUB/SUB 代码,但没有收到任何信息。我将主题设置为无,但仍然没有收到。我究竟做错了什么?我把主题设置为空,让它对所有内容做出反应,我也尝试将主题设置为“测试”,仍然没有任何反应。
PUB
#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main (void)
{
void *context = zmq_init(1);
void *socket = zmq_socket(context, ZMQ_PUB);
zmq_connect(socket, "tcp://127.0.0.1:12345");
sleep(1);
char message[15] = "test\n";
while(1) {
zmq_send(socket, message, 15, 0);
sleep(2);
printf("sending..\n");
}
return 0;
}
SUB
#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main (void)
{
void *context = zmq_init(1);
void *socket = zmq_socket(context, ZMQ_SUB);
zmq_connect(socket, "tcp://127.0.0.1:12345");
zmq_setsockopt(socket, ZMQ_SUBSCRIBE, "", 0);
char string[15] = "";
while(1) {
zmq_recv(socket,string,15,0);
printf("i has received\n");
printf("%s\n", string);
sleep(1);
}
return 0;
}
您的发布者和订阅者都在呼叫 zmq_connect
。因为两者都没有侦听 连接,所以它们永远不会建立成功的连接。您需要选择其中之一作为侦听器。例如,修改 pub.c
使其看起来像:
#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main (void)
{
void *context = zmq_init(1);
void *socket = zmq_socket(context, ZMQ_PUB);
/*
* Call zmq_bind so that the publisher is listening for
* connections.
*/
if (-1 == zmq_bind(socket, "tcp://127.0.0.1:12345")) {
perror("zmq_connect");
exit(1);
}
sleep(1);
char message[15] = "test\n";
while(1) {
if (-1 == zmq_send(socket, message, 15, 0)) {
perror("zmq_send");
exit(1);
}
sleep(2);
printf("sending..\n");
}
return 0;
}
您会注意到我在这里也添加了一些错误检查。
我正在尝试制作一个简单的 PUB/SUB 代码,但没有收到任何信息。我将主题设置为无,但仍然没有收到。我究竟做错了什么?我把主题设置为空,让它对所有内容做出反应,我也尝试将主题设置为“测试”,仍然没有任何反应。
PUB
#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main (void)
{
void *context = zmq_init(1);
void *socket = zmq_socket(context, ZMQ_PUB);
zmq_connect(socket, "tcp://127.0.0.1:12345");
sleep(1);
char message[15] = "test\n";
while(1) {
zmq_send(socket, message, 15, 0);
sleep(2);
printf("sending..\n");
}
return 0;
}
SUB
#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main (void)
{
void *context = zmq_init(1);
void *socket = zmq_socket(context, ZMQ_SUB);
zmq_connect(socket, "tcp://127.0.0.1:12345");
zmq_setsockopt(socket, ZMQ_SUBSCRIBE, "", 0);
char string[15] = "";
while(1) {
zmq_recv(socket,string,15,0);
printf("i has received\n");
printf("%s\n", string);
sleep(1);
}
return 0;
}
您的发布者和订阅者都在呼叫 zmq_connect
。因为两者都没有侦听 连接,所以它们永远不会建立成功的连接。您需要选择其中之一作为侦听器。例如,修改 pub.c
使其看起来像:
#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main (void)
{
void *context = zmq_init(1);
void *socket = zmq_socket(context, ZMQ_PUB);
/*
* Call zmq_bind so that the publisher is listening for
* connections.
*/
if (-1 == zmq_bind(socket, "tcp://127.0.0.1:12345")) {
perror("zmq_connect");
exit(1);
}
sleep(1);
char message[15] = "test\n";
while(1) {
if (-1 == zmq_send(socket, message, 15, 0)) {
perror("zmq_send");
exit(1);
}
sleep(2);
printf("sending..\n");
}
return 0;
}
您会注意到我在这里也添加了一些错误检查。