3

我需要编写一个订单管理器,将客户(股票、外汇等)订单路由到适当的交易所。客户想要发送订单,但对 FIX 或其他专有协议一无所知,只知道用于发送订单的内部(标准化)格式。我有每个通过 FIX/Binary/etc 连接到每个 FIX/etc 提供程序的应用程序(服务器)。我希望在客户端和服务器之间有一个代理程序,该程序采用规范化订单并将其转换为给定 FIX/etc 提供程序的正确格式,并从服务器获取消息并将其转换回客户端的规范化格式. 客户端可以指定路由,但由客户端和服务器之间的代理程序负责在客户端和服务器之间来回传递有关该订单的消息。所以不知何故输出[填充,

我研究了 ZMQ 拓扑,并且 REQ->ROUTER->DEALER 不起作用[代码起作用-我的意思是它是错误的拓扑],因为服务器并不相同。

//This topology doesn't work because the servers are not identical
#include "zhelpers.hpp"

int main (int argc, char *argv[])
{
    // Prepare our context and sockets
    zmq::context_t context(1);
    zmq::socket_t frontend (context, ZMQ_ROUTER);
    zmq::socket_t backend (context, ZMQ_DEALER); // ZMQ_ROUTER here? Can't get it to work

    frontend.bind("tcp://*:5559");
    backend.bind("tcp://*:5560");

    // Start built-in device
    zmq::device (ZMQ_QUEUE, frontend, backend);


    return 0;
}

我认为也许 ROUTER->ROUTER 拓扑是正确的,但我无法让代码工作 - 客户端发送订单但从未收到回复,所以我一定做错了什么。我认为使用 ZMQ_IDENTITY 是正确的做法,但我不仅不能让它工作,而且似乎 ZMQ 正在远离 ZMQ_IDENTITY?

有人可以举一个简单的例子,说明三个 ZMQ 程序 [不在单独的线程,三个单独的进程中],它们显示了正确的方法吗?

4

2 回答 2

3

查看指南中的 MajorDomo 示例:http://zguide.zeromq.org/page:all# toc71

您将在每个交易所使用一个工作池。

于 2012-07-03T05:57:16.827 回答
2

响应:

ROUTER->ROUTER 拓扑是正确的,但我无法让代码工作

我的理解是 ZMQ 套接字成对出现以启用某种模式。

  1. 一对
  2. 请求/代表
  3. 发布/订阅
  4. 推拉

只有 PAIR 套接字类型可以与另一个 PAIR 类型的套接字对话,并且其行为类似于您的普通套接字。

对于所有其他套接字类型,有一个用于通信的免费套接字类型。例如 REQ 套接字类型只能与 REP 套接字类型对话。REQ 套接字类型不能与 REQ 套接字类型对话。

我的理解是,在 ROUTER/DEALER 中,ROUTER 可以与 DEALER 通信,但 ROUTER 不能与 ROUTER 套接字类型通信。

我的理解可能是错误的,但从这些例子来看,这是我迄今为止所理解的。

于 2012-06-24T17:54:26.027 回答