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' 设置为 ETERM 或 EINTR (与指定套接字之一关联的 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 贡献策略。