单个 skynet 进程内的服务数量被 handle 数量限制
harbor id 编码到源地址的高 8 位 == 255 个 skynet 节点
单个服务中 handle 的最终限制在 24bit 内,也就是 16M/个
master
广播同步所有的全局名字,以及加入进来的 skynet 节点的地址
key-value 的形式储存, 每个 skynet 节点号对应一个字符串的地址
以 : 开头,跟上 8 字节的 16 进制的数字串标识
全局名字不可以超过 16 个字符。
harbor 服务
集群间的通讯
编译:
ebnf描述语法规则
ast(抽象语法树)形成语法结构(用树状结构表示源代码的语法结构,
树的每一个节点就代表源代码中的一个结构)
消息调度
两级消息队列
全局消息队列
里面放的是诸个不为空的次级消息队列
向一个服务发送一个消息
就是把这样一个消息体压入这个服务的私有消息队列中
callback 函数被调用的过程中
其它工作线程没有可能获得这个 callback 函数所熟服务的次级消息队列
服务的消息队列暂时为空
不再被放回全局消息队列
struct skynet_message {
uint32_t source;
int session;
void * data;
size_t sz;
};
// ctx --------------------------------------------------------------------------------------------------
struct skynet_context {
void * instance; // 由指定module的create函数,创建的数据实例指针,同一类服务可能有多个实例,
// 因此每个服务都应该有自己的数据
struct skynet_module * mod; // 引用服务module的指针,方便后面对create、init、signal和release函数进行调用
void * cb_ud; // 调用callback函数时,回传给callback的userdata,一般是instance指针
skynet_cb cb; // 服务的消息回调函数,一般在skynet_module的init函数里指定
struct messag