Skynet

开源并发框架
授权协议 MIT
开发语言 C/C++
所属分类 程序开发、 并发/并行处理框架
软件类型 开源软件
地区 国产
投 递 者 江鸿羲
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Skynet 是一个基于 Actor 模式的开源并发框架。

skynet 节点,通过 master ,认识网络中所有其它 skynet 节点。它们相互一一建立单向通讯通道。也就是说,如果一共有 100 个 skynet 节点,在它们启动完毕后,会建立起 1 万条通讯通道。

这个系统是单进程多线程模型。

每个内部服务的实现,放在独立的动态库中。由动态库导出的三个接口 create init release 来创建出服务的实例。init 可以传递字符串参数来初始化实例。比如用 lua 实现的服务(这里叫 snlua ),可以在初始化时传递启动代码的 lua 文件名。

每个服务都是严格的被动的消息驱动的,以一个统一的 callback 函数的形式交给框架。框架从消息队列里取到消息,调度出接收的服务模块,找到 callback 函数入口,调用它。服务本身在没有被调度时,是不占用任何 CPU 的。框架做两个必要的保证。

一、一个服务的 callback 函数永远不会被并发。

二、一个服务向两一个服务发送的消息的次序是严格保证的。

我用多线程模型来实现它。底层有一个线程消息队列,消息由三部分构成:源地址、目的地址、以及数据块。框架启动固定的多条线程,每条工作线程不断的 从消息队列取到消息。根据目的地址获得服务对象。当服务正在工作(被锁住)就把消息放到服务自己的私有队列中。否则调用服务的 callback 函数。当 callback 函数运行完后,检查私有队列,并处理完再解锁。

线程数应该略大于系统的 CPU 核数,以防止系统饥饿。(只要服务不直接给自己不断发新的消息,就不会有服务被饿死)

由于我们是在同一个进程内工作的。所以我对消息传递做了一点优化。对于目前的点对点消息,要求发送者调用 malloc 分配出消息携带数据用到的内存;由接受方处理完后调用 free 清理(由框架来做)。这样数据传递就不需要有额外的拷贝了。

  • 1 skynet介绍 ​ Skynet 是一个基于C跟lua的开源服务端并发框架,这个框架是单进程多线程Actor模型。是一个轻量级的为在线游戏服务器打造的框架。 我在云风博客的基础上,把重要的知识点加上具体的example来讲解skynet如何去使用。前面的比较啰嗦一些,大家不想了解这些知识的,可以直接跳转到第二章节。     1.1 简介 ​ 这个系统是单进程多线程模型。 ​ 每个服务都是严格

  • 入门观看博客笔记: 博客笔记: 第五篇 关于服务别名 别名注册与查询接口: 在skynet中,服务别名可以分为两种: 一种是本地别名,本地别名只能在当前skynet节点使用,本地别名必须使用. 开头,例如:.testalias 一种是全局别名,全局别名可以在所有skynet中使用,全局别名不能以. 开头, 例如:testalias 取别名: 1、给当前服务定一个别名 可以是全局别名 也可以是本地别

  • 前言 skynet是基于C做任务调度和消息传递, 基于lua做业务(消息)处理的框架。 只要使用的平台c编译器支持c99,就能够编译运行skynet。 所以理论上skynet可以运行在嵌入式领域的。 虽然skynet非常好用,但是skynet却不太好入门。 如果不充分理解skynet的原理,那么会提高不少的维护成本。 因此编写此文档旨在更了解skynet的原理。 关于skynet框架的C语言部分网

  • skynet中服务器启动需要使用config配置,这其中设计到了环境变量的设置 和 环境变量的值的获取 skynet.setenv 和 skynet.send 源码 在skynet.lua 中的代码 function skynet.getenv(key) return (c.command("GETENV",key)) end function skynet.setenv(key, valu

  • 这是一篇纯草稿纸记录的文章,毫无技术可言,哈哈 按照skynet readme运行的结果,程序中加了一些日志帮助分析启动流程 [dongsong@localhost skynet]$ ./skynet examples/config | tee skynet.log root = "./" thread = 8 logger = nil harbor = 1 address = "127.0.0.

  • 前导 本人在Skynet开源初期就持续关注,阅读了Skynet的大部份代码,受益匪浅。当时因工作需要,要为一个项目选型 一套服务器的架构。项目并不是游戏行业,而是联网报警、视频管理、定位追踪相关。查阅了很多资料,对比了很多开源的框架,比如:golang、nodejs、java的一些项目,最后锁定为golang或Skynet。后来因为lua更灵活,更方便的调用现有的c库,同时跨平台性强( 公模块需要

  • 本文来自:https://blog.csdn.net/qq769651718/article/details/79432809(翻译,学习用) 1、在ubuntu上搭建skynet 2 、获取skynet源代码 安装git代码管理工具​ $ sudo apt-get update $ sudo apt-get install git ​ 注意:如果安装失败,请先安装一下只支持库 $ s

  • skynet并不是一个开箱即用的服务端框架,游戏后端在开展业务时,需要根据自身业务特点,合理设计相应的服务端框架。在这里我根据自身的设计目标,写下各方面的选择与取舍。对于小型企业来说,一些商业化的软件带来的成本负担是不可接受的,所以在各种组件的选型都倾向于开源软件。 设计目标 设计一个高性能低成本的游戏服务端框架,兼顾数据一致性与可用性。这里的成本指的是开发成本,维护成本,机器成本的总和。高性能我

  • https://github.com/cloudwu/skynet 电商不是有C2B B2C C2C这些个概念么,互动百科的CEO甚至还对抄袭美其名曰:COPY TO CHINA (C2C)。 鸟人今天也为C2B赋予新意:COPY TO BLOG。哈哈 研究skynet的朋友请移步云风的博客,我这里纯属抄袭下来做标记笔记用的,因为个人阅读习惯如此。 http://blog.codingnow.co

  • 因为做游戏服务器开发,大多数都跟脚本打交道,要么是lua,要么是python,要么是php,方便热更新的只有lua与php, php相关的游戏服务器开发,参考我另外的文章 https://blog.csdn.net/guoyilongedu/article/details/121049511 lua脚本相关的,自己也实现了一套,只不过不支持多线程,单进程的,基于libevent与luajit,上线

  • Skynet早期拥有lua-cjson库,后被sproto取代。由于Lua5.3开始支持整形,但cjson并没有适配Lua5.3,若直接编译会造成JSON字符串中的数字转换为浮点数的问题。因此风云为cjson提供了一个补丁:https://github.com/mpx/lua-cjson/pull/22 也可使用风云维护的另一个分支:https://github.com/cloudwu/lua-c

 相关资料
  • 一、前言 关于开源框架这块,其实主要是针对自己项目中使用到的框架进行准备。从使用,到使用场景、优缺点以及源码实现都需要逐一掌握理解。这一部分是向面试官展示自己水平与能力的一个重要部分,所以要着重准备。 针对开源框架,该部分整理了自己在做项目过程中使用到的几个框架。大多都是从网上找的一些大佬的文章,深入浅出,着重讲述源码实现,可以帮助自己更好的理解。 二、目录 OkHttp解析 Retrofit解析

  • "One does not live by bread alone,but by every word that comes from the mouth of God" --(MATTHEW4:4) python开发框架 不管是python,还是php,亦或别的做web项目的语言,乃至于做其它非web项目的开发,一般都要用到一个称之为什么什么框架的东西。 框架的基本概念 开发这对框架的认识,由于

  • 主要内容:1.Disruptor介绍,2.Disruptor 的核心概念,3.demo1.Disruptor介绍 Disruptor是一个开源的Java框架,它被设计用于在生产者—消费者(producer-consumer problem,简称PCP)问题上获得尽量高的吞吐量(TPS)和尽量低的延迟。 从功能上来看,Disruptor 是实现了“队列”的功能,而且是一个有界队列。那么它的应用场景自然就是“生产者-消费者”模型的应用场合了。 其实Disruptor与其说是一个框架,不

  • 想改进这个问题吗?更新问题,以便通过编辑这篇文章用事实和引用来回答。 我的公司想开发一个移动应用程序。Web应用程序、本机应用程序还是混合应用程序?他们其实不知道。在这种情况下,他们要求我对移动开发的开源框架(跨平台框架btw)进行一些研究(我不是移动开发专家)。我做到了。现在,我大致了解了实际存在的情况,并选择了其中的8个。 现在,我想要的是你的个人反馈(赞成/反对/喜欢/不喜欢/如果你留下了另

  • 「盘古开发框架」是一套轻量稳健的工业级前、中、后台三维多端行业数字化赋能开发框架。基于商业友好的 Apache-2.0 协议免费开源发布。我们希望不仅是开源的受益者也能成为开源贡献者,与开源社区一起共建共享开源生态。 生态子项目 盘古开发框架由「盘古服务开发框架」、「盘古中后台业务系统开发脚手架」、「盘古移动端多平台开发脚手架」三个子项目组成。可以单独拆箱使用,也可以打包整合。 盘古服务开发框架(

  • 主要内容:Fork,Join,ForkJoinPool,RecursiveAction,递归任务,实例框架允许在几个工作进程中断某个任务,然后等待结果组合它们。 它在很大程度上利用了多处理器机器的生产能力。 以下是框架中使用的核心概念和对象。 Fork Fork是一个进程,其中任务将其分成可以并发执行的较小且独立的子任务。 语法 这里是的子类,方法将任务分解为子任务。 Join 连接()是子任务完成执行后任务加入子任务的所有结果的过程,否则它会持续等待。 语法 这里剩下的是类的一个对象。 For