本文介绍: (数量可配置),它们不断的从主消息列队中取出一个次级消息队列来,再从次级队列中取去一条消息,调用对应的服务的 callback 函数进行出来。为了调用公平,一次仅处理一条消息,而不是耗净所有消息(虽然那样的局部效率更高,因为减少了查询服务实体的次数,以及主消息队列进出的次数),这样可以保证没有服务会被饿死。③一个服务是用skynet_context作为服务的实例,一个唯一的handle的id作为唯一id识别服务(id即使在集群里面也是唯一)大到小:集群->skynet节点->服务。不为空的次级消息队列。
一、消息队列
①Skynet 维护了一个全局消息队列
,里面放的是诸个不为空的次级消息队列
②在 Skynet 启动时,建立了若干工作线程
(数量可配置),它们不断的从主消息列队中取出一个次级消息队列来,再从次级队列中取去一条消息,调用对应的服务的 callback 函数进行出来。为了调用公平,一次仅处理一条消息,而不是耗净所有消息(虽然那样的局部效率更高,因为减少了查询服务实体的次数,以及主消息队列进出的次数),这样可以保证没有服务会被饿死
③结果:
这样,skynet就实现了把一个消息(数据包)从一个服务发送给另一个服务。
二、集群节点
大到小:集群->skynet节点->服务
①一个集群内可以启动很多个skynet节点,每个节点都会分配到唯一的habor id,每个habor id是8位
②一个节点(即一个进程)内有很多个服务,服务可以狭义地暂且理解为功能模块。
③一个服务是用skynet_context作为服务的实例,一个唯一的handle的id作为唯一id识别服务(id即使在集群里面也是唯一)
④初始化新服务代码
三、消息发送
四、消息执行
五、服务具体执行的流程
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。