本文对nanomsg进行系统讲解( socket不同类型的区别):
1.pull/push和rep/req的区别:
对于pull/push,客户端为push,其send数据后,server端会立即接收到
对于rep/req,客户端为req,其send数据后,客户端并不会立即发送给client,客户端必须再执行recv调用后,才会真正send数据
2. pair和req/req区别:
pair中,客户端只要send数据,server端就会接收到,客户端不必连续执行send,recv。但是,pair是一对一的,也就是说
附:
libc.h在linux是找不到的(XOS下才有),按照如下方法换成linux的.h,编译的时候要加上-pthread和最后的-lanl选项
//#include <libc.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
gcc -pthread reqrep.c /usr/local/lib/libnanomsg.a -o reqrep -lanl
Socket设置
int req;
int sndprio;
char buf [64];
/* Open a REQ socket. */
nn_init ();
req = nn_socket (AF_SP, NN_REQ);
/* Connect to 3 servers in New York and 1 in London. */
sndprio = 1;
nn_setsockopt (req, NN_SOL_SOCKET, NN_SNDPRIO, &sndprio, sizeof (int));
nn_connect (req, "tcp://newyorksrv001");
nn_connect (req, "tcp://newyorksrv002");
nn_connect (req, "tcp://newyorksrv003");
sndprio = 2;
nn_setsockopt (req, NN_SOL_SOCKET, NN_SNDPRIO, &sndprio, sizeof (int));
nn_connect (req, "tcp://londonsrv001");
/* Do your work. */
while (1) {
nn_send (req, "MyRequest", 9, 0);
nn_recv (req, buf, sizeof (buf), 0);
process_reply (buf);
}
/* Clean up. */
nn_close (req);
nn_term ();