跳至内容

Junyi's Lab

Zero Mq 注意事项

官方网站:ZeroMQ

我用的实现版本:libzmq

对我个人来说,ZMQ 可以免去我「维持 socket 通信可靠性」、「高性能并发」等任务。

(虽然之前自己也写了一整套)

ZMQ 的设计思路大体上跟我自己的想法很接近。

// client.cpp
void *requester = zmq_socket (context, ZMQ_REQ);

// server.cpp
void *requester = zmq_socket (context, ZMQ_REP);

如果你的 client 和 server 是上面这样写的(REQ-REP),那就要注意,zmq_send () 之后要接一个 zmq_recv ()

send 和 recv 要成对出现,才能维护 REQ-REP 的状态机。


但这样的写法我不是很喜欢,在手写 socket 的时候我更喜欢

// client.cpp
uint8_t payload[1024];
int checksum = calc_checksum(payload);
int length = sizeof(payload);
send(socket, PROTOCOL, 4);
send(socket, VERSION, 4);
send(socket, length, 4);
send(socket, payload, length);
send(socket, checksum, 4);

而不是 ZeroMQ 的一收一发。

当然 ZeroMQ 有它的设计思路,我不喜欢这么写也只是我不喜欢这么写,就像我之前说的,我不喜欢这么写。

(什么废话文学)