-
Notifications
You must be signed in to change notification settings - Fork 0
skynet简析
Zheng Ping edited this page Apr 18, 2015
·
2 revisions
Skynet的核心只处理一个问题,把一个符合规范的C模块从动态库中启动起来,绑定一个永不重复的id作为其handle,这个模块被称作服务(Service),服务可以取一个易读的名字,服务间可以自由发送消息。
核心不处理什么问题呢:它不解决进程间通信问题,它没有定义类似于TCP连接的概念,没有约定RPC调用协议,也没有设定数据包的编码方式。
简单地说,Skynet只负责把一个数据包从一个服务发送出去,让同一进程内的另一个服务收到,调用对应的回调函数处理。它保证,模块的初始化过程,每个独立的callback调用,都是线程安全的。
Skynet核心不解决远程数据通信交换工作,集群间的通信由一个独立的harbor服务来完成。
master服务的作用就是广播同步所有的全局名字,以及加入进来的skynet地址。master服务不必存在当前的Skynet节点中。
skynet.uniqueservice
表明在同一个节点中一个服务只启动一次。默认情况下uniqueservice是不跨节点的,但也可以通过传递额外的参数来使得全网的服务跨节点实现唯一。注意uniqueservice是惰性初始化,整个系统第一次初始化时,服务才会被启动起来。skynet用来查询服务,如果服务不存在,这个api会阻塞到它启动好为止。uniqueservice一般专用于服务管理。