Skynet源码之:service_harbor(18)
service_harbor 的实现和《Skynet源码之:节点建立》密切相关
可以先了解一下 harbor 的设计和历史
让我们看看 service_harbor 的 harbor_create 创建函数
struct harbor * harbor_create(void) { struct harbor * h = skynet_malloc(sizeof(*h)); // 创建了一个 struct harbor 结构体的内存 memset(h, 0, sizeof(*h)); h->map = hash_new(); return h; // 返回 struct harbor 结构体的句柄 } // 下面开始都是一些结构体的定义 // 远程消息的头部 struct remote_message_header { uint32_t source; uint32_t destination; uint32_t session; }; // 远程消息 struct harbor_msg { struct remote_message_header header; void * buffer; size_t size; }; // 远程消息队列 struct harbor_msg_queue { int size; int head; int tail; struct harbor_msg * data; // 实质是一个 结构体数组,参考《Skynet消息队列》中二级消息队列的实现 }; struct keyvalue { struct keyvalue * next; char key[GLOBALNAME_LENGTH]; uint32_t hash; uint32_t value; struct harbor_msg_queue * queue; }; // slave结构体 struct slave { int fd; struct harbor_msg_queue *queue; int status; int length; int read; uint8_t size[4]; char * recv_buffer; }; // hashmap结构体 struct hashmap { struct keyvalue *node[HASH_SIZE]; }; // harbor结构体 struct harbor { struct skynet_context *ctx; int id; uint32_t slave; struct hashmap * map; struct slave s[REMOTE_MAX]; }; // 将 hashmap 初始化为0 static struct hashmap * hash_new() { struct hashmap * h = skynet_malloc(sizeof(struct hashmap)); memset(h, 0, sizeof(*h)); return h; } 看看 harbor_init 函数的做了什么
2024-05-12
阅 读 全 文