ZeroMQ API 代理

Posted 渔舟唱晚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZeroMQ API 代理相关的知识,希望对你有一定的参考价值。

1、zmq_proxy(3)

1.1 名称

  zmq_proxy - 开始内置ZMQ代理

1.2 概要

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

1.3 描述

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

  代理将前端套接字连接到后端套接字。从概念上讲,数据从前端流向后端。根据套接字类型的不同,回复可能会以相反的方向流动。方向只是概念上的;代理是完全对称的,前端和后端没有技术上的区别。

  在调用zmq_proxy()之前,您必须设置任何套接字选项,并连接或绑定前端和后端套接字。这两种传统的代理模式是:

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

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

  有关可用套接字类型的说明,请参阅zmq_socket(3)。

1.4 用法示例

1.4.1 共享队列

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

1.4.2 转发

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

1.4.3 流

  当前端是ZMQ_PULL套接字,后端是ZMQ_PUSH套接字时,代理服务器应从一组客户端收集任务并使用管道模式将这些任务转发给一组工作人员。

1.4.4 返回值

  zmq_proxy()函数始终返回-1,并将errno设置为ETERM(与任一指定套接字关联的ZMQ上下文已终止)。

2、zmq_proxy_steerable()

2.1 名称

  zmq_proxy_steerable - 内置带控制流的ZMQ代理

2.2 概要

  int zmq_proxy_steerable(const void * frontend,const void * backend,const void * capture,const void * control);

2.3 描述

  zmq_proxy_steerable()函数在当前应用程序线程中启动内置的ZMQ代理,如zmq_proxy()所做的那样。请参阅此功能的一般说明和用法。我们在这里只描述由作为第四个参数“control”传递的套接字提供的附加控制流。

  如果控制套接字不是NULL,则代理支持控制流。如果在此套接字上收到PAUSE,代理将暂停其活动。如果收到RESUME,它会继续。如果接收到TERMINATE,它将顺利终止。在开始时,代理正常运行,就像使用zmq_proxy一样。

  如果控件套接字为NULL,则该函数的行为与调用zmq_proxy时的行为完全相同。

  有关可用套接字类型的说明,请参阅zmq_socket(3)。有关zmq_proxy的说明,请参阅zmq_proxy(3)。

2.4 用法示例

  比较zmq_proxy

2.5 返回值

  如果将TERMINATE发送到其控制套接字,则zmq_proxy_steerable()函数返回0。否则,它返回-1,并将errno设置为ETERM(与任一指定套接字关联的ZMQ上下文已终止)。

以上是关于ZeroMQ API 代理的主要内容,如果未能解决你的问题,请参考以下文章

ZeroMQ API 安全

SaltStack与ZeroMQ

ZeroMQ的bind和connect

ZeroMQ API 似乎忽略了我的 PUB

如何在 ZeroMQ 的 REQ-REP 模式中获取请求者的公共 IP?

使用 zeroMQ 在 PHP 中进行并行处理