skynet源码分析(1)--模块加载

作者:shihuaping0918@163.com,转载请注明作者

两个月前接触skynet,最初使用的时候过程是相当痛苦的,而且网络上可以找到的学习资料并不多。当时决定写一些skynet相关的文章,最近终于有空了,开始写这个东西。

skynet是云风开源的一个游戏框架,底层是c,中间层和上层都是lua。基于actor模型,使用消息队列进行内部通信。万丈高楼平地起,先开始看最底层的内容吧,因为上层的会涉及一些业务,而最底层的只涉及一些系统调用,理解起来更简单。

阅读代码使用的工具是eclipse cdt。代码提交tag是f94ca6f

skynet底层代码位于skynet/skynet-src下,模块加载相关在skynet-module.c skynet-module.h这两个文件里。这里的模块在linux下指的是so,在windows下指的是dll,在skynet中指的是config中配置的cpath下的文件。

//以下四行为函数指针声明
typedef void * (*skynet_dl_create)(void);
typedef int (*skynet_dl_init)(void * inst, struct skynet_context *, const char * parm);
typedef void (*skynet_dl_release)(void * inst);
typedef void (*skynet_dl_signal)(void * inst, int signal);

//单个模块的结构体
struct skynet_module {
    const char * name; //模块名
    void * module; //模块指针
    skynet_dl_create create;  //create函数
    skynet_dl_init init; //init函数
    skynet_dl_release release; //release函数
    skynet_dl_signal signal; //signal函数
};

//添加一个模块
void skynet_module_insert(struct skynet_module *mod);
//查询一个模块
struct skynet_module * skynet_module_query(const char * name);
//某个模块中的create函数调用
void * skynet_module_instance_create(struct skynet_module *);
//某个模块中的init函数调用
int skynet_module_instance_init(s
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值