我目前正在开发一个带有服务器的系统,它可以获取某些客户端的任务并处理它们。
由于我需要高吞吐量,我检查了1Gbit网络中往返速度。
情景:
我在16台机器上使用了16个客户端作为基准测试。
基准测试1:(没有工作人员,服务器直接将消息发送回客户端) 结果:
基准2:(有10个工作人员,服务器只是作为经纪人)
来源:
有人可以通过添加带有一些工作线程的inproc-roundtrip来帮助我确定为什么TP会下降那么多吗?我真的期望用工作线程获得更高的TP。 ZMQ Inproc性能不是那么快吗?
答案 0 :(得分:0)
您没有为ZMQ_ROUTER / ZMQ_DEALER套接字使用正确的模式。
伪代码是
front = zmq_socket (context, ZMQ_ROUTER);
zmq_bind(front, "tcp://*:15555");
back = zmq_socket(context, ZMQ_DEALER);
zmq_bind (back, "inproc://abc");
// Here create thread
zmq_proxy(front, back, NULL); // zmq_proxy will not return
线程的伪代码是
socket = zmq_socket(context, ZMQ_REP);
zmq_connect(socket, "inproc://abc");
do {
zmq_recv(...)
zmq_send(...)
} while (1);
客户端的伪代码是
socket = zmq_socket(context, ZMQ_REQ);
zmq_connect(socket, "tcp://127.0.0.1:15555");
do {
zmq_send(...)
zmq_recv(...)
} while (1);