skynet框架 源码分析 一

原创 2013年12月06日 18:13:59


       本人所看的skynet框架,是云风所写的开源分布式服务器系统。
       说说广泛流传的分布式系统,我觉得最简单的理解就是,一个服务器系统可以开很多进程来完成任务,并且这些进程可以不受地域的限制,同时跑在不同的主机上面(当然也可以跑在同一台主机上),以服务器集群的方式应答各个服务请求,各进程之间通过socket的方式通信。

       我们先从整体结构上来俯视这个框架。
       大体上,该系统是一个actor模式的服务端框架。系统遵循的规则是:客户端或者服务节点发送服务请求到服务系统,服务器系统专门开辟多个工作线程,从一个消息队列中取一组消息,处理其中一个,然后归还。也就是所谓的邮件列表形式,即在一个邮件列表中取一组邮件,该组邮件都来自同一个角色。取出该组邮件中的第一封,并处理其中服务请求。在完处理完毕之后,弹出该邮件,并且将邮件组重新放到邮件列表中,等待下一次处理。这样做的目的,我猜测,作者的初衷应当是想构建一个无锁的消息处理逻辑,达到即可以利用多线程,又可以简化线程之间的临界区域逻辑。
       接下来,假设我们只运行一个进程。那么在进程启动成功后,内部会生成有很多服务的节点,如图所示:


      每个节点都有服务的功能,但是节点的服务类型可以重复比如:agent。同一个模块,可以生成不同的服务节点,比如:snlua模块(skynet node lua,框架中的节点并且在lua的中执行回调,后面会详细解析),它就可以生成watchdog, agent, launcher等节点。同一个进程之中每个节点包含三个最关键的要素:上下文(context),句柄(handle),消息队列(message_queue)。向不同的节点的handle发送消息,就是向该节点的消息组message_queue添加一个消息处理请求。该消息不会立马被处理,等到work线程执行到该节点时,取到该消息的时候,才会执行该消息请求,并运行相关的逻辑。

      假设一个进程中的节点是二维平面。那么在多个进程的情况,平行展开,就可以形成一个三维空间。我猜测这就更加符合这个框架的名字“天网”的来源了。







Skynet服务器框架(二) C源码剖析启动流程

前言:最近因为要帮别人做一个Mac和Windows平台下都使用的桌面应用,功能很简单,就是一个文本编辑器,所以大致了解了一下跨平台桌面应用开发的框架,知乎上推荐多半是 Electron 和 NW.js...
  • linshuhe1
  • linshuhe1
  • 2017年04月15日 15:15
  • 4301

云风skynet服务端框架研究

http://forthxu.com/blog/skynet.html skynet是云风编写的服务端底层管理框架,底层由C编写,配套lua作为脚本使用,可换python等其他脚本语言。...
  • oMingZi12345678
  • oMingZi12345678
  • 2015年12月10日 13:44
  • 7360

skynet框架 源码分析 三

今天我们来读service_lua.c文件。        这个文件很重要,它是模块snlua的源文件,也是各个lua服务节点的制造者。比如:agent服务节点,watchdog服务节点,launch...
  • a240581469
  • a240581469
  • 2013年12月08日 16:45
  • 10311

skynet框架 源码分析 三

今天我们来读service_lua.c文件。        这个文件很重要,它是模块snlua的源文件,也是各个lua服务节点的制造者。比如:agent服务节点,watchdog服务节点,lau...
  • linking530
  • linking530
  • 2016年10月09日 12:54
  • 437

skynet框架 源码分析 四

本章主要讲解:skynet的组播服务是怎么发生的,如何运用。 组播这个过程主要涉及了以下几个服务。 group_mgr,group_agent,multicast,tunnel,localcast。 ...
  • a240581469
  • a240581469
  • 2013年12月12日 19:39
  • 4875

Skynet服务器框架(六) Socket服务源码剖析和应用

引言: 如何在skynet框架中使用socket+protobuf。上篇 Skynet服务器框架(五) 使用pbc(protobuf) 我们已经大致了解了如何在Skynet中通过pcb来使用Pr...
  • linshuhe1
  • linshuhe1
  • 2017年05月22日 19:43
  • 2227

skynet教程(1)--服务的编写

作者:shihuaping0918@163.com,转载请注明作者自从skynet源码分析系列文章发布以后,陆续收到不少的反馈,说需要一个step by step的教程,身边的朋友也要求出个教程。于...
  • 119365374
  • 119365374
  • 2017年09月02日 08:20
  • 1542

skynet任务调度分析

云风同学开源的skynet,当前规模是8K+ C代码和2K+ lua代码,实现了一个多线程高并发的在线游戏后台服务框架,提供定时器、并发调度、服务扩展框架、异步消息队列、命名服务等基础能力,支持lua...
  • sharemyfree
  • sharemyfree
  • 2015年07月03日 12:24
  • 749

skynet范例研究-服务端

源码分为3个文件夹,分别为service、lualib、src。 其中service主要是服务端 业务逻辑 ,lualib为 基础工具封装 ,src为 C语言服务封装 。 一般阅读代码时先...
  • linking530
  • linking530
  • 2017年01月21日 18:57
  • 467

skynet框架 源码分析 二

一个游戏服务器系统的数据流向有很多种。在skynet中,我主要看到了三种,一种是从客户端流到服务器,而后服务器处理完毕之后,发送回客户端。第二种是一个harbor流向另外一个harbor,这应该就是服...
  • linking530
  • linking530
  • 2016年10月09日 12:47
  • 449
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:skynet框架 源码分析 一
举报原因:
原因补充:

(最多只允许输入30个字)