NAME

zmq_proxy - 启动内置的 0MQ 代理

SYNOPSIS

int zmq_proxy (void '*frontend', void '*backend', void '*capture');

DESCRIPTION

zmq_proxy() 函数在当前应用程序线程中启动内置的 0MQ 代理。

代理将前端套接字连接到后端套接字。概念上,数据从前端流向后端。根据套接字类型,回复可能沿相反方向流动。方向仅是概念上的;代理是完全对称的,前端和后端之间没有技术差异。

在调用 zmq_proxy() 之前,您必须设置所有套接字选项,并连接或绑定前端和后端套接字。两种常用的代理模型是

zmq_proxy() 在当前线程中运行,并且仅当/当前上下文关闭时才返回。

如果捕获套接字不为 NULL,代理将把在前端和后端收到的所有消息发送到捕获套接字。捕获套接字应为 'ZMQ_PUB', 'ZMQ_DEALER', 'ZMQ_PUSH', 或 'ZMQ_PAIR' 套接字。

请参考 zmq_socket 以获取可用套接字类型的描述。

EXAMPLE USAGE

共享队列

当前端是 ZMQ_ROUTER 套接字,后端是 ZMQ_DEALER 套接字时,代理将充当共享队列,收集来自一组客户端的请求,并将这些请求公平地分发给一组服务。请求将从前端连接公平排队,并均匀分布到后端连接。回复将自动返回给发起原始请求的客户端。

转发器

当前端是 ZMQ_XSUB 套接字,后端是 ZMQ_XPUB 套接字时,代理将充当消息转发器,收集来自一组发布者的消息并将其转发给一组订阅者。这可用于桥接网络传输,例如在 tcp:// 上读取并在 pgm:// 上转发。

流媒体

当前端是 ZMQ_PULL 套接字,后端是 ZMQ_PUSH 套接字时,代理将收集来自一组客户端的任务,并使用管道模式将其转发给一组工作者。

RETURN VALUE

zmq_proxy() 函数总是返回 -1 并且 'errno' 设置为 ETERMEINTR (与指定套接字之一关联的 0MQ 'context' 已终止) 或 EFAULT (提供的 'frontend' 或 'backend' 无效)。

EXAMPLE

创建一个共享队列代理
//  Create frontend and backend sockets
void *frontend = zmq_socket (context, ZMQ_ROUTER);
assert (frontend);
void *backend = zmq_socket (context, ZMQ_DEALER);
assert (backend);
//  Bind both sockets to TCP ports
assert (zmq_bind (frontend, "tcp://*:5555") == 0);
assert (zmq_bind (backend, "tcp://*:5556") == 0);
//  Start the queue proxy, which runs until ETERM
zmq_proxy (frontend, backend, NULL);

SEE ALSO

AUTHORS

本页面由 0MQ 社区编写。要进行修改,请阅读位于 https://zeromq.cn/how-to-contribute/ 的 0MQ 贡献策略。