官方网站: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 有它的设计思路,我不喜欢这么写也只是我不喜欢这么写,就像我之前说的,我不喜欢这么写。
(什么废话文学)