前言
nanomsg的前身是ZeroMQ。本人也是先接触到ZeroMQ,毕竟ZeroMQ相关资源丰富,较易上手。官方提供了很好的解释两者之间的差异(Differences between nanomsg and ZeroMQ)。
无痛从ZeroMQ转换至nanomsg
由于nanomsg的sample code整理较少,故引用ZeroMQ範例,并改成nanomsg。
// Hello World server#include <stdio.h>#include <thread>#include "nn.h"#include "reqrep.h"int main(void){int responder = nn_socket(AF_SP, NN_REP);int rc = nn_bind(responder, "tcp://127.0.0.1:5555");if (rc < 0) exit(1);while (1) {char *buffer = NULL;nn_recv(responder, &buffer, NN_MSG, 0);printf("Received %s\n", buffer);nn_freemsg(buffer);std::this_thread::sleep_for(std::chrono::milliseconds(1));nn_send(responder, "World", 5, 0);}return 0;}
// Hello World client#include <stdio.h>#include "nn.h"#include "reqrep.h"int main(void){printf("Connecting to hello world server\n");int requester = nn_socket(AF_SP, NN_REQ);int rc = nn_connect(requester, "tcp://127.0.0.1:5555");for (int i = 0;; ++i) {char *buffer = NULL;printf("Sending Hello %d\n", i);nn_send(requester, "Hello", 5, 0);nn_recv(requester, &buffer, NN_MSG, 0);printf("Received %s %d\n", buffer, i); nn_freemsg(buffer);}nn_close(requester);return 0;}
比较后可以发现,API其实很好置换。
zmq_socket
nn_socket
zmq_bind
nn_bind
zmq_connect
nn_connect
zmq_send
nn_send
zmq_recv
nn_recv
zmq_close
nn_close
zmq_ctx_new
-zmq_ctx_destroy
-