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(六) 代理