这篇文章,讲Skynet 调度机制中另外一个重点是:服务。
- 服务的结构
- 创建服务
- 消息回调
- 日志服务
- 参考资料
服务
把一个符合规范的 C 模块,从动态库(so 文件)中加载进来。绑定一个永不重复的数字 id 做为其 handle 。
这个运行的模块就是服务。 服务本质上是C语言的一个结构体。
模块和服务的关系,可以理解为程序和进程。
struct skynet_context {
void * instance; // 指针,指向模块create的结构体
struct skynet_module * mod; // 对动态库 so 的封装
void * cb_ud; // 消息回调的上下文
skynet_cb cb; // 消息回调
struct message_queue *queue; // 服务所属的消息队列
FILE * logfile; // 如果存在,会通过 skynet_log_output 记录消息到这个文件中
char result[32]; // 保存相关函数的临时结果
uint32_t handle; // 服务的 handle, 具有唯一性
int session_id; // 请求回应模式
int ref; // 引用计数
int message_count; // 记录服务总共处理了多少个消息
...
};
创建服务
通过下面函数,可以创建一个服务。
struct