gpt4 book ai didi

c - 使用 czmq 传递消息

转载 作者:太空宇宙 更新时间:2023-11-04 02:01:52 25 4
gpt4 key购买 nike

我正在尝试使用 czmq,第一个测试使用 inproc 协议(protocol)是可以的,如果“puller”和“pusher”在同一个程序中。但是我想在不同的进程上使用它,我也尝试了ipc和tcp,但我无法实现服务器和客户端的通信。

服务器:

#include <czmq.h>
int main (void)
{

zctx_t *ctx = zctx_new ();


void *reader = zsocket_new (ctx, ZMQ_PULL);

int rc = zsocket_connect (reader, "tcp://localhost:5555");
printf("wait for a message...\n");

char *message = zstr_recv (reader);

printf("Message: %s",message);

zctx_destroy (&ctx);
return 0;
}

和客户:

#include <czmq.h>
int main (void)
{

zctx_t *ctx = zctx_new ();

void *writer = zsocket_new (ctx, ZMQ_PUSH);

int rc = zsocket_bind (writer, "tcp://*:5555");
assert (rc == service);
zstr_send (writer, "HELLO");

zsocket_destroy (ctx, writer);

return 0;

}

你能告诉我我的代码有什么问题吗?我还尝试了找到的其他示例代码,但没有取得更多成功。

更新

服务器正在等待 zstr_recv 中的消息,但客户端发送的消息不会触发服务器进程。

最佳答案

发送消息后,客户端进程销毁套接字的速度过快。使用 inproc,您可以“摆脱它”,因为 inproc 速度很快,而 TCP 在消息到达 TCP 堆栈之前必须经过更多的障碍。

如果 ZMQ_LINGER = -1(原始 ZMQ 的默认值),那么 zsocket_destroy() 确实应该阻塞直到消息被发送,但是 CZMQ 的默认逗留时间是 0。这意味着当套接字时丢弃传输中的消息被摧毁。

尝试将逗留时间(使用 zctx_set_linger)设置为大于零的值;或许 10 毫秒,但使用任何适合您的值。

关于c - 使用 czmq 传递消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26396916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com