从零开始学习SkyNet_概念

一、Skynet的一些概念。

1、服务:

     只需要把符合规范的 .lua 文件放在 skynet 可以找到的路径下就可以由其它服务启动。在 skynet 的配置文件里配置了服务查询路径,以及需要启动的第一个服务,而其它服务都是由该服务直接或间接启动的。每个服务拥有一个唯一的 32bit id ,skynet 把这个 id 称为服务地址,由 skynet 框架分配。即使服务退出,该地址也会尽可能长时间的保留,以避免当消息发向一个正准备退出的服务后,新启动的服务顶替该地址,而导致消息发向了错误的实体(摘自云风Github)

       每个服务分为三个运行阶段:

i).首先是服务加载阶段:这个阶段不可以调用任何有可能阻塞住该服务的 skynet api 。因为此时和服务配套的 skynet        设置并没有初始化完毕。

ii).然后是服务初始化阶段:由 skynet.start 这个 api 注册的初始化函数执行。这个初始化函数理论上可以调用任何    skynet api了,但启动该服务的 skynet.newservice 这个 api 会一直等待到初始化函数结束    才会返回。

iii).最后是服务工作阶段:当你在初始化阶段注册了消息处理函数的话,只要有消息输入,就会触发注册的消息处理函  数。这些消息都是 skynet 内部消息,外部的网络数据,定时器也会通过内部消息的形式表  达出来。

Tips:

1. 和 erlang 不同,一个 skynet 服务在某个业务流程被挂起后,即使回应消息尚未收到,它还是可以处理其他的消息       的。

2. 如果一条用户线程永远不调用阻塞 API 让出控制权,那么它将永远占据系统工作线程。不过,skynet 框架也做了一     些监控工作,会在某个服务内的某个工作线程占据了太长时间后,以 log 的形式报告。


2、消息:

每条skynet消息由6部分构成:消息类型、session 、发起服务地址 、接收服务地址 、消息 C 指针、消息长度skynet预定义了一组消息类型,需要开发者关心的有:回应消息、网络消息、调试消息、文本消息、Lua 消息、错误。另外,skynet 还约定,如果一个请求不需要回应(单向推送),就置 session 为 0 。


3、集群:

虽然 skynet 可以被配置为多节点模式,但不推荐使用。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值