标签归档:skynet源码分析

RSS feed of skynet源码分析

skynet源码分析09_cluster与socketchannel


cluster就是集群的意思了,和master/slave模式不同的是,它支持断线重连,但是不能在同一条连接上既主动请求又能主动推送消息。

由于cluster和socketchannel分不开,并且skynet框架本身用到socketchannel的地方不多,我又暂时不想去研究mysql、redis库,所以就把它们放在一起了。

本文在理解 skynet源码分析07_socket阻塞库(socket.lua)的基础上配合2016年下旬最新版skynet源码注释更佳

继续阅读

skynet源码分析08_master_slave模式


skynet是支持在不同机器上协作的,之间通过TCP互连。不过有两种模式可以选,一种是master/slave模式,一种是cluster模式,这里说说master/slave模式。

  1. skynet的master/slave模式是一个master与多个slave的模式,master与每个slave相连,每个slave又两两互连。master同时会充当一个中心节点的作用,用来协调各个slave的工作。
  2. 如果在config中,配置harbor = 0,那么skynet会工作带单节点模式下,其他参数(address、master、standalone)都不用设置。
  3. 如果在config中配置 harbor 为1-255中的数字,那么skynet会工作在多节点模式下,如果配置了 standalone, 那么此节点是中心节点。
  4. 只要是多节点模式, address 与 master 都需要配置,其中 address 为此节点的地址,供本节点监听, master 为外部中心节点的地址,供slave连接(或者供中心节点监听)

本文配合2016年下旬最新版skynet源码注释更佳

继续阅读

skynet源码分析07_socket阻塞库(socket.lua)


为什么要有socket阻塞库呢,直接引用skynet项目关于socket的wiki:

skynet 的 C API 采用异步读写,你可以使用 C 调用,监听一个端口,或发起一个 TCP 连接。但具体的操作结果要等待 skynet 的事件回调。skynet 会把结果以 PTYPE_SOCKET 类型的消息发送给发起请求的服务。(参考skynet_socket.h)

在处理实际业务中,这样的 API 很难使用,所以又提供了一组阻塞模式的 lua API 用于 TCP socket 的读写。它是对 C API 的封装。

所谓阻塞模式,实际上是利用了 lua 的 coroutine 机制。当你调用 socket api 时,服务有可能被挂起(时间片被让给其他业务处理),待结果通过 socket 消息返回,coroutine 将延续执行。

本文在理解skynet源码分析06-socket处理流程的基础上配合2016年下旬最新版skynet源码注释更佳

继续阅读

skynet源码分析05-地址管理


skynet消息发送是通过地址来投递的。

地址按形式分:数字地址,与字符串地址

地址按作用范围分:单节点有效("."开头),整个skynet网络有效(字母开头),这里只说单节点有效的地址,多节点有效的留到后面的 master/slave 比较好点

字符串地址是不允许冒号开头的

skynet源码分析02-服务创建流程中已经提过消息创建的时候最终都会通过skynet_context_new进行创建服务的结构体

本文配合2016年下旬最新版skynet源码注释更佳

继续阅读

skynet源码分析04-消息处理(协程)


skynet的消息处理是每个消息过来都对应一个协程进行处理。以前分析过一次,并简单记录过一些东西,无奈这中间的处理有点绕,再猛然一看有点懵。有可能是自己没有完全理解吧。今天又分析了一遍,索性把以前写的自己都看不懂的东西都删了,这里再详细记录下。

这里只是分析,代码片段在skynet消息处理相关代码(协程),打开两个网页对照着看可能比较好,本文中提到的所有函数都可以找到。

这里主要分析消息处理框架的主要流程。当然分析这些之前最好知道消息是怎么注册的,以及消息到来时服务怎么调用消息处理函数的。

本文配合2016年下旬最新版skynet源码注释更佳

继续阅读

skynet源码分析01-设计小览


不知不觉用skynet快一年了,几个月前有段时间从源码中大概看了一些设计思路,其实主要是看了消息处理的协程那块,即便如此,也对我后面的工作有很大的帮助。后面忙于业务逻辑上的处理,加上自己确实很懒,就暂时放下这块。近期又有点时间了,就慢慢整体梳理了下,除了cluster和snax基本看了一遍,这里也算是做个笔记。此篇主要将各个线程的主要工作流程抠出来看,不注重细节。我一直觉得认识一件新事物之前,应该先去窥全貌,才能理解的透彻。

建议先大致过一遍skynet的wiki
本文配合2016年下旬最新版skynet源码注释更佳

继续阅读