协议中 nni_sp_tran_sys_init();的初始化比较简单,主要对传输层的结构体进行赋值,并挂在全局链表 sp_tran_list上。 为后面的上层的初始化做准备。其中一些函数会根据 解析的
url->u_scheme [ipc] 在全局链表sp_tran_list查找对应的传输层结构体,实现初始化操作。 这里基本就是赋值和添加到链表 nni_list_append(&sp_tran_list, tran); 添加完成就完成了初始化动作。是比较简单的一块,不需要特殊关注。
nni_sp_tran_sys_init(void);
初始化函数中依次调用下面的函数,对传输层结构体进行初始化,并添加到全局链表
void
nni_sp_tran_sys_init(void)
{
#ifdef NNG_TRANSPORT_INPROC
nni_sp_inproc_register();
#endif
#ifdef NNG_TRANSPORT_IPC
nni_sp_ipc_register();
#endif
#ifdef NNG_TRANSPORT_TCP
nni_sp_tcp_register();
#endif
#ifdef NNG_TRANSPORT_TLS
nni_sp_tls_register();
#endif
#ifdef NNG_TRANSPORT_WS
nni_sp_ws_register();
#endif
#ifdef NNG_TRANSPORT_WSS
nni_sp_wss_register();
#endif
#ifdef NNG_TRANSPORT_ZEROTIER
nni_sp_zt_register();
#endif
#ifdef NNG_TRANSPORT_FDC
nni_sp_sfd_register();
#endif
}
void
nni_sp_tran_register(nni_sp_tran *tran)
{
nni_rwlock_wrlock(&sp_tran_lk);
if (!nni_list_node_active(&tran->tran_link)) {
tran->tran_init();
nni_list_append(&sp_tran_list, tran);
nng_log_info(
"NNG-TRAN", "Registered transport: %s", tran->tran_scheme);
}
nni_rwlock_unlock(&sp_tran_lk);
}