skynet
明潮
这个作者很懒,什么都没留下…
展开
-
skynet源码赏析
写在最前面skynet是目前使用比较广泛的服务端框架,虽然目前网上资料众多,但是从自己的学习和使用经历来看,缺乏能够让自己系统了解该框架底层机制的资料,这段时间,趁着自己有时间,阅读了skynet底层的一些代码,现在将自己理解的部分总结并记录下来,以备日后使用。本文旨在捋清skynet框架的结构和主要流程,并不会涉及skynet的方方面面,一些论述,我贴上了一些源码加以论证,并在引用的源码里加入了...转载 2018-05-17 13:54:35 · 5073 阅读 · 0 评论 -
skynet源码分析4:actor生命周期管理
skynet是基于多线程的,每个actor都会被单独的线程调度,且每个actor可以杀死其它actor,给其它actor发送消息,创建actor,也就是一个actor可能被多个线程持有,那么就会面临三个问题:一个actor被同时使用时,如何安全释放。actor被释放后,外部使用时如何检测该actor已经无效了,以便流程能继续。若信箱里的消息具有请求回应语义,那么如果通知消息源。框架使用的是hand...转载 2018-05-21 17:58:47 · 239 阅读 · 0 评论 -
skynet源码分析5:lua绑定之地基
前面四篇已经涵盖了skynet的c层核心,剩下的timer,socket模块本身和actor模型没什么关系,且比较独立,最后再看吧。光用skynet的c接口,是很难在这上面写业务逻辑的,所以要找一种更爽快的方式来使用。官方推荐的是lua,利用lua的协程对skynet的消息分发做了封装,使得actor之间的异步消息通信有同步一样的操作感,并且做了一些的扩展模块来方便使用。lua简洁实用的风格我个人...转载 2018-05-22 14:52:56 · 376 阅读 · 0 评论 -
lua 异步HTTPS并发请求库
项目使用skynet框架,这个框架主要用lua写逻辑,但缺乏对HTTPS支持,所以我利用一点时间写了lua模块,支持异步HTTPS请求,文章这里讲述HTTPS相关知识,如何接入openssl请求HTTPS数据,同时也分享了lua模块给大家参考。HTTPS说明HTTPS可以理解成 HTTP协议的安全版,协议还是HTTP协议,只是对传输过程的数据进行了加密处理,保证数据传输的安全。(默认端口是443)...转载 2018-05-23 11:06:52 · 1208 阅读 · 0 评论 -
Skynet服务器框架 Linux下的安装和启动
引言:一直都是从事客户端的开发工作,最近抽了点时间想了解一下服务器开发的相关知识,一番博客瞎逛之后,发现了一个不错的框架,云风大神的 skynet开源服务器框架,这不仅仅是针对于游戏服务器开发的框架,更是一个通用的服务器基础框架。Skynet简介:Skynet 主要工作是管理注册服务,并开启多线程协调服务之间的调用和通讯。1.框架核心:根据云风博客的描述,Skynet 的核心功能就是解决一个问题:...转载 2018-05-23 17:35:55 · 424 阅读 · 0 评论 -
Skynet服务器框架 Lua服务创建和启动剖析
前言:之前从Skynet启动过程,解读了skynet的启动部分C语言编写的底层源码 Skynet服务器框架(二)C源码剖析启动流程,最后成功启动了引导的lua服务bootstrap.lua,接下来我们要尝试自定义一个lua服务,并让它启动起来。bootstrap实现功能:bootstrap.lua源码:local skynet = require "skynet"local harbor = r...转载 2018-05-23 17:36:54 · 1570 阅读 · 0 评论 -
Skynet服务器框架 使用pbc(protobuf)
引言:假如我们要建立的skynet服务器与客户端的连接方式为长连接,且选择了Google的Protobuf来定制我们的网络协议,那么,接下来我们要解决的问题就是:如何在skynet框架中使用socket+protobuf。API几个常用的skynet接口:* 输出错误信息: skynet.error(...)* 获取本地服务句柄方式: skynet.localnam...转载 2018-05-23 17:38:04 · 1379 阅读 · 0 评论 -
Skynet服务器框架 Socket服务源码剖析和应用
引言:如何在skynet框架中使用socket+protobuf。上篇 Skynet服务器框架(五) 使用pbc(protobuf) 我们已经大致了解了如何在Skynet中通过pcb来使用Protobuf,接下来我们开始了解skynet中有关Socket的部分。socket_server C源码解析:较早版本的skynet并没有提供对于网络层的定制,而是可以由开发者自行定义,不过最新版本的skyn...转载 2018-06-05 15:55:37 · 598 阅读 · 0 评论 -
Skynet服务器框架(七) Lua中调用自定义C库
引言:在skynet中,我们通常使用lua来写业务层的逻辑,并且每个功能模块基本上就是一个运行在沙盒中的lua服务。但是,当需要我们需要开发拓展的库或者进行高性能要求的模块开发时,还是需要考虑在C语言层面来开发一个动态库(.so),并提供可以在lua中调用的接口,然后再lua中调用此C库。自定义C库:查看了Lua官方的关于如何注册C库(C Libraries)的内容,其中有一段如下:When yo...转载 2018-06-05 15:59:00 · 551 阅读 · 0 评论 -
skynet服务的本质与缺陷
skynet服务的设计统观整篇文章,不难发现:每个skynet服务都是一个lua state,也就是一个lua虚拟机实例。而且,每个服务都是隔离的,各自使用自己独立的内存空间,服务之间通过发消息来完成数据交换。架构图如下:图片取自spartan1的skynet任务调度分析lua state本身没有多线程支持的,为了实现cpu的摊分,skynet实现上在一个线程运行多个lua state实例。而同一...转载 2018-06-06 16:03:27 · 11054 阅读 · 0 评论 -
skynet源码分析3:消息调度
从四个方面来说: 1、消息发送 2、工作线程控制 3、信箱调度 4、消息分发与调度相关的代码实现在/skynet-src/skynet_mq.c,/skynet-src/skynet_start.c,/skynet-src/skynet_server.c三个文件中,整体上是一个m:n的调度器。消息发送skynet的消息定义在/skynet-src/skynet_mq.h中: struct ...转载 2018-05-21 17:58:12 · 330 阅读 · 0 评论 -
skynet源码分析2:模块
actor在skynet中称为模块,每个模块由皮囊和骨骼组成。皮囊承载用户逻辑,骨骼承载内部框架逻辑。皮囊(skynet_module)皮囊在框架中用skynet_module对象表示,实现在skynet-src/skynet_module.c中,代表一个动态库.下文用sm来称呼.先来看看sm的定义,在skynet-src/skynet.h中 1 typedef void * (*skynet_d...转载 2018-05-21 17:57:34 · 243 阅读 · 0 评论 -
skynet源码分析1:开篇明义
skynet是云风基于actor模型实现的一个服务器框架,核心七千多行c代码,并提供了一个lua binding。写得比较简明,用起来比较爽快,很合我的胃口,再加之决定在公司最近的一个项目上skynet,所以就决定精读一遍源码,将所思所想所得记录于此,以便用起来心安理得。skynet的实现基于如下几条actor行为:能创建,销毁其它actor,actor间为平级关系。能发送消息给其它actor,能...转载 2018-05-21 17:56:50 · 280 阅读 · 0 评论 -
skynet cluster 模块的设计与编码协议
skynet 在最初的设计里,希望做一个分布式系统,抹平 actor 放在本机和处于网络两端的差别。所以,设计了 master/slave 模式。利用 4 个字节表示 actor 的地址,其高 8 位是节点编号,低 24 位是进程(节点)内的 id 。这样,在同一个系统中,不管处于哪个进程下,每个 actor (在 skynet 中被成为服务)都有唯一的地址。在投递消息时,无需关心目的地是在同一个...转载 2018-05-17 14:01:14 · 895 阅读 · 0 评论 -
学习skynet
云风最新关于skynet的blog:上周末,我对 skynet 的 cluster 模块做了一点优化。cluster 模式 是 skynet 的一种集群方案,用于将多台机器更为弹性的组成一个集群。我们将每台机器都赋予一个名字,然后就可以在集群间用这个名字向对方推送消息或发起请求。集群的管理是一项非常复杂的工作,skynet 作为一个轻量化的框架,只实现了最基本的基础设施。cluster 这个基础设...原创 2018-05-15 14:47:06 · 694 阅读 · 0 评论 -
spinlock的一种实现
skynet中的spinlock.h#ifndef SKYNET_SPINLOCK_H#define SKYNET_SPINLOCK_H#define SPIN_INIT(q) spinlock_init(&(q)->lock);#define SPIN_LOCK(q) spinlock_lock(&(q)->lock);#define SPIN_UNLOCK...原创 2018-05-17 18:03:46 · 976 阅读 · 0 评论 -
Skynet服务器框架 C源码剖析启动流程
引言:之前我们已经完成了在Linux下配置安装 skynet 的环境,并成功启动了 skynet 服务框架,为了从底层更好地理解整个框架的实现过程,我们有必要剖析一下源码,由于底层的源码都是用C语言写的,lua脚本基本是用来进行业务层开发,所以我们从C源码开始解读框架。打开下载包的 skynet-src 目录,这里是skynet框架的核心C源码,接下来我们就要来解读 skynet_main.c 和...转载 2018-05-18 11:31:39 · 734 阅读 · 0 评论 -
Skynet 设计综述
经过一个月, 我基本完成了 skynet 的 C 版本的编写。中间又反复重构了几个模块,精简下来的代码并不多:只有六千余行 C 代码,以及一千多 Lua 代码。虽然部分代码写的比较匆促,但我觉得还是基本符合我的质量要求的。Bug 虽不可避免,但这样小篇幅的项目,应该足够清晰方便修正了吧。花在 Github 上的这个开源项目上的实际开发实现远小于一个月。我的大部分时间花了和过去大半年的 Erlang...转载 2018-05-18 14:27:47 · 726 阅读 · 0 评论 -
云风开发笔记(25) : 改进的 RPC
自从动了重新实现 skynet 的念头,最近忙的跟狗一样。每天 10 点醒来就忙着写代码,一句废话都不想说,一直到晚上 11 点回家睡觉。连续干了快一个月了。到昨天,终于把全部代码基本移植到了新框架下,正常启动了起来。这项工作算是搞一段落。庆幸的是,我这个月的工作,并没有影响到其他人对游戏逻辑的开发。只是我单方面的同步不断新增的逻辑逻辑代码。Skynet 的重写,实际上在半个月前就已经完成。那时,...转载 2018-05-18 19:35:08 · 435 阅读 · 0 评论 -
actor、reactor与proactor模型
actor、reactor与proactor模型:高性能服务器的几种模型概念。actor模型:实体之通过消息通讯,各自处理自己的数据,能够实现这并行。说白了,有点像rpc。skynet是actor模型。reactor模型:1 向事件分发器注册事件回调2 事件发生4 事件分发器调用之前注册的函数4 在回调函数中读取数据,对数据进行后续处理libevent是reactor模型。proactor模型:1...转载 2018-05-21 14:06:47 · 4041 阅读 · 0 评论 -
高并发分布式事务解决之道-Actor模型(附Akka与Reactor比较)
----- Actor模型(1) 事务机制来由为什么大多数互联网软件都是数据喂机器,或函数式即可,比如twitter或facebook,因为他们没有事务要求,一般涉及到钱等重要交易都需要事务,也可以这么说,非结构化的数据一般都没有事务要求,结构化聚合的数据才有事务要求。(2) 事务例子用户甲的操作1.开始事务2.访问表A3.访问表B4.提交事务乙用户在操作1.开始事务2.访问表B3.访问表A4.提...转载 2018-05-21 15:00:53 · 996 阅读 · 0 评论 -
Actor模式初步入门
从实习到现在,一直在做Unity相关的业务,不知不觉中感觉已经不在关注服务器相关的技术了。一次偶然的机会再腾讯的gad平台上观看了云风在15年在腾讯做的skynet讲座(http://gad.qq.com/content/coursedetail/467),skynet是用c写的核心,lua做上层业务,基于actor模型的服务器框架,哈哈,这次学习actor模式的学习也是因此而起。 Acto...转载 2018-05-21 15:23:21 · 1716 阅读 · 0 评论 -
dynamic libraries not enabled; check your Lua installation
[plain] view plain copy [:1000001] LAUNCH logger [:1000003] LAUNCH gate L ! 0.0.0.0:2013 5 256 0 [:1000002] LAUNCH master 0.0.0.0:2013 [:1000004] Harbor(0) connect to 1...转载 2018-06-21 14:50:52 · 2278 阅读 · 0 评论