Skynet:服务管理

Skynet服务管理基于32位无符号整数标识,高8位标识节点,低24位标识服务。服务信息存储在skynet_server.c,节点信息存储在skynet_harbor.c。初始化包括全局服务信息的skynet_globalinit和节点信息的skynet_harbor_init。新建服务通过skynet_context_new,涉及模块加载、服务实例创建和初始化,最后加入全局队列。
摘要由CSDN通过智能技术生成

每个服务通过一个32位的无符号整数进行标识,整数的高8位用于定位属于哪个节点,低24位用于定位属于哪个服务。本地节点号通过HARBOR进行存储位于文件skynet_harbor.c中,全局的所有服务信息通过H进行存储位于文件skynet_handle.c中。其中涉及到的结构有:

struct handle_name {
    char * name;        //服务名字
    uint32_t handle;    //用于定位服务,高8位为节点编号,低24位为服务号
};

//全局服务信息结构体
struct handle_storage {
    struct rwlock lock;                //读写锁

    uint32_t harbor;                //定位节点
    uint32_t handle_index;            //服务的信息下一个存储到slot的第几个
    int slot_size;                    //存储服务信息数组的大小
    struct skynet_context ** slot;    //存储服务信息数组

    int name_cap;                    //服务名数组的容量
    int name_count;                    //服务名数组当前存的服务名的数量
    struct handle_name *name;        //服务名及定位服务的handle
};

每个服务的信息存储结构体定义于文件skynet_server.c中,该文件实现了服务的基本逻辑功能,并且在该文件中定义了一个结构体用于记录该节点上全局服务的状态信息,相应的结构体为:

//每个服务的信息存储结构体
struct skynet_context {
    void * instance;                    //动态连接库的实例指针    即服务的实例指针
    struct skynet_module * mod;            //指定已加载的动态库信息
    void * cb_ud;                        //服务回调的对象
    skynet_cb cb;                        //服务的回调函数
    struct message_queue *queue;        //服务队列
    FILE * logfile;                        //日志输出的文件
    uint64_t cpu_cost;    // in microsec    //消耗CUP时间    精确到微秒
    uint64_t cpu_start;    // in microsec    //本线程到当前代码
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值