我需要编写一个订单管理器,将客户(股票、外汇等)订单路由到适当的交易所。客户想要发送订单,但对 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 程序 [不在单独的线程,三个单独的进程中],它们显示了正确的方法吗?