nanomsg 1.1.5 源代码分析 (二)

2018-11-27  本文已影响0人  RonZheng2010

这里分别分析server端和client端的过程。使用的协议为xpub/xsub,底层协议为IPC。

1. server端 (xpub)

1.1 nn_socket()

nn_socket()创建一个nn_sock表示nanomsg socket,domain和protocol指定了协议类型。

int nn_socket (int domain, int protocol);

nn_sock的成员sockbase指向协议对象,也就是nn_sockbase派生类的实例,这里是nn_xpub。nn_xpub用自身指定sockbase的值,还用自己的虚函数nn_xpub_sockbase_vfptr设置nn_sockbase的虚函数表vfptr。

nn_xpub与底层传输协议对象间需要一个数据通道,它的成员outpipes就是保存该通道的。当连接准备好时,底层对象会调用nn_sockbase_vfptr->add()通知nn_xpub。(对nn_xpub来说,add()是nn_xpub_add())

nn_socket()首先在nn_global的nn_sock[]中找到空闲位置,然后调用nn_global_create_socket()创建nn_sock对象。

1.2 nn_bind()

nn_bind()根据指定的底层传输协议,初始化一系列底层对象,并把它们绑定到指定的地址上去。

int nn_bind (int s, const char *addr);

addr参数包括了协议类型和地址,如“ipc:///tmp/pubsub.ipc”,“ipc”是传输协议类型,“///tmp/pubsub.ipc”是地址。

这个过程中创建的对象包括:

与client端连接完成后,还有一件事,就是关联底层传输协议对象和上层协议对象,打通两者之间的数据通道。这个通道就是nn_sipc的成员nn_pipebase。

2. Client端 (xsub)

2.1 nn_socket()

nn_socket()创建一个nn_sock。不同于Server端的是,nn_sock的nn_sockbase指针指向nn_xsub。

2.2 nn_setsockopt()

nn_setsockopt()设置nn_sock的选项,这个选项针对底层的原始socket,也可能针对nn_xsub。比如,nn_xsub支持消息过滤,nn_sockopt()可以设置过滤条件。

2.3 nn_connect()

nn_connect()将根据指定的底层协议,初始化一系列的底层对象,并连接到指定地址的server端。

这个过程中创建的对象包括:

与server端连接成功后,还要关联底层传输协议对象和上层协议对象,这次sipc的成员nn_pipebase会连接到nn_xsub。

相关链接
nanomsg 1.1.5 源代码分析 (一)
nanomsg 1.1.5 源代码分析 (二)
nanomsg 1.1.5 源代码分析 (三)
nanomsg 1.1.5 源代码分析 (四)

上一篇下一篇

猜你喜欢

热点阅读