skynet专题

skynet源码分析4:actor生命周期管理

skynet是基于多线程的,每个actor都会被单独的线程调度,且每个actor可以杀死其它actor,给其它actor发送消息,创建actor,也就是一个actor可能被多个线程持有,那么就会面临三个问题: 一个actor被同时使用时,如何安全释放。actor被释放后,外部使用时如何检测该actor已经无效了,以便流程能继续。若信箱里的消息具有请求回应语义,那么如果通知消息源。 框架使用的是

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/skyne

skynet源码分析2:模块

actor在skynet中称为模块,每个模块由皮囊和骨骼组成。皮囊承载用户逻辑,骨骼承载内部框架逻辑。 皮囊(skynet_module) 皮囊在框架中用skynet_module对象表示,实现在skynet-src/skynet_module.c中,代表一个动态库.下文用sm来称呼. 先来看看sm的定义,在skynet-src/skynet.h中 1 typedef void

Skynet 设计综述

经过一个月, 我基本完成了 skynet 的 C 版本的编写。中间又反复重构了几个模块,精简下来的代码并不多:只有六千余行 C 代码,以及一千多 Lua 代码。虽然部分代码写的比较匆促,但我觉得还是基本符合我的质量要求的。Bug 虽不可避免,但这样小篇幅的项目,应该足够清晰方便修正了吧。 花在 Github 上的这个开源项目上的实际开发实现远小于一个月。我的大部分时间花了和过去大半年的 Erla

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

引言: 之前我们已经完成了在Linux下配置安装 skynet 的环境,并成功启动了 skynet 服务框架,为了从底层更好地理解整个框架的实现过程,我们有必要剖析一下源码,由于底层的源码都是用C语言写的,lua脚本基本是用来进行业务层开发,所以我们从C源码开始解读框架。打开下载包的 skynet-src 目录,这里是skynet框架的核心C源码,接下来我们就要来解读 skynet_ma

【skynet】 网络编程之回显服务器

写在前面 skynet 提供了一套 tcp 的 API ,本文将给出简单的回显服务器实现,以及讲解。 文章目录 写在前面编译 skynet服务框架agent_mgragent 注意事项源代码agent_mgr 服务agent 服务配置文件 编译 skynet 拉取 skynet 工程 git clone https://github.com/cloudwu/skyne

skynet中newservice和uniqueservice的区别

先上uniqueservice代码 function skynet.uniqueservice(global, ...)if global == true thenreturn assert(skynet.call(".service", "lua", "GLAUNCH", ...))elsereturn assert(skynet.call(".service", "lua", "LAUNC

skynet源码阅读<1>--lua与c的基本交互

阅读skynet的lua-c交互部分代码时,可以看到如下处理:   struct skynet_context * context = lua_touserdata(L, lua_upvalueindex(1));       那么,问题来了:skynet_context是如何作为upvalue与C函数绑定在一起的呢?这里以luaopen_skynet_core(lua_State *L)

skynet 配置中lua服务创建流程

众所周知,skynet必须配置启动脚本,比如说如下配置 thread=8logger=nilharbor=0start="main"lua_path="./skynet/lualib/?.lua;./skynet/lualib/?/init.lua;"luaservice="./skynet/service/?.lua;./app/?.lua;"lualoader="./skynet

【Skynet 入门实战练习】事件模块 | 批处理模块 | GM 指令 | 模糊搜索

文章目录 前言事件模块批处理模块GM 指令模块模糊搜索最后 前言 本节完善了项目,实现了事件、批处理、模糊搜索模块、GM 指令模块。 事件模块 什么是事件模块?事件模块是用来在各系统之间传递事件消息的。 为什么需要事件模块?主要目的是用来减少模块之间的耦合。 事件模块使用场景: 常见的有网游中的任务系统,监听角色的升级事件,分派相应的任务监听登录登出事件,做相应的资源

【Skynet 入门实战练习】事件模块 | 批处理模块 | GM 指令 | 模糊搜索

文章目录 前言事件模块批处理模块GM 指令模块模糊搜索最后 前言 本节完善了项目,实现了事件、批处理、模糊搜索模块、GM 指令模块。 事件模块 什么是事件模块?事件模块是用来在各系统之间传递事件消息的。 为什么需要事件模块?主要目的是用来减少模块之间的耦合。 事件模块使用场景: 常见的有网游中的任务系统,监听角色的升级事件,分派相应的任务监听登录登出事件,做相应的资源

2022年4月9日记:Linux服务器开发,Mark,skynet重要组件以及手撕游戏项目

──────────────────────────────────── ┌————————————┐ │▉▉♥♥♥♥♥♥♥♥ 99% │ ♥❤ 鱼沈雁杳天涯路,始信人间别离苦。 └————————————┘ 对你的感情正在充电中,请稍侯… ──────────────────────────────────── 推荐一个 零声学院 免费公开课程,个人觉得老师讲得不错,分享给大家:[Linux

2022年4月8日记:Linux服务器开发,Mark,skynet网络层封装以及lua/c接口编程

──────────────────────────────────── ┌————————————┐ │▉▉♥♥♥♥♥♥♥♥ 99% │ ♥❤ 鱼沈雁杳天涯路,始信人间别离苦。 └————————————┘ 对你的感情正在充电中,请稍侯… ──────────────────────────────────── 推荐一个 零声学院 免费公开课程,个人觉得老师讲得不错,分享给大家:[Linux

2022年4月8日记:Linux服务器开发,Mark,Skynet设计原理

──────────────────────────────────── ┌————————————┐ │▉▉♥♥♥♥♥♥♥♥ 99% │ ♥❤ 鱼沈雁杳天涯路,始信人间别离苦。 └————————————┘ 对你的感情正在充电中,请稍侯… ──────────────────────────────────── 推荐一个 零声学院 免费公开课程,个人觉得老师讲得不错,分享给大家:[Linux

【Skynet 入门实战练习】分布式 ID | 雪花算法 | 缓存设计 | LRU算法 | 数据库

文章目录 前言雪花算法LRU 算法缓存模块数据库测试逻辑 前言 本节实现了 分布式 ID 生成系统,采用雪花算法实现唯一 ID;实现缓存架构,采用 LRU (最近最少使用)算法。 雪花算法 分布式 ID 生成算法的有很多种,Twitter 的雪花算法(SnowFlake)就是其中经典的一种。 SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图:

【Skynet 入门实战练习】分布式 ID | 雪花算法 | 缓存设计 | LRU算法 | 数据库

文章目录 前言雪花算法LRU 算法缓存模块数据库测试逻辑 前言 本节实现了 分布式 ID 生成系统,采用雪花算法实现唯一 ID;实现缓存架构,采用 LRU (最近最少使用)算法。 雪花算法 分布式 ID 生成算法的有很多种,Twitter 的雪花算法(SnowFlake)就是其中经典的一种。 SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图:

【Skynet 入门实战练习】游戏模块划分 | 基础功能模块 | timer 定时器模块 | logger 日志服务模块

文章目录 游戏模块基础功能模块定时器模块日志模块通用模块 游戏模块 游戏从逻辑方面可以分为下面几个模块: 注册和登录网络协议数据库玩法逻辑其他通用模块 除了逻辑划分,还有几个重要的工具类模块: Excel 配置导表工具GM 指令测试机器人服务器打包部署工具 本节先来实现几个通用的基础功能模块。 基础功能模块 定时器模块 在什么场景下,我们会要使用到定时器? 每

【Skynet 入门实战练习】开发环境搭建 | 运行第一个项目 | debug console 简单使用

文章目录 写在前面开发环境搭建skynet配置文件项目,启动! debug console 写在前面 本系列【Skynet 入门实战练习】所有源码同步:https://gitee.com/Cauchy_AQ/skynet_practice 开发环境搭建 skynet skynet 框架地址:https://github.com/cloudwu/skynet git cl

skynet学习笔记03— 服务

01、API newservice(name, ...): 阻塞的形势启动一个名为 name 的新服务,待start函数执行完后会返回这个服务的地址。uniqueservice(name, ...):针对于当前节点,启动一个唯一服务(相当于单例),如果服务该服务已经启动,则返回已启动的服务地址。queryservice(true, name, ...):针对于所有节点,启动一个唯一服务。quer

skynet学习笔记02— skynet介绍、skynet基础API与环境变量

01、Skynet与Actor模型 在系统Skynet之前,先了解一下Skynet与Actor模型,下列是风云大佬的介绍以及一个大佬的博客 https://github.com/cloudwu/skynet/wiki/GettingStartedhttps://blog.csdn.net/qq769651718/article/details/79432793 02、Skynet基础API