skynet(v1.4.0)学习笔记

news/2025/11/17 16:59:05/文章来源:https://www.cnblogs.com/572354941hnit/p/19233505

skynet(v1.4.0)学习笔记

  • 登录流程

    • 游戏中一般为了减轻登录服的压力,采用主从登录服务设计

      local function login(conf)local name = "." .. (conf.name or "login")skynet.start(function()local loginmaster = skynet.localname(name)if loginmaster thenlocal auth_handler = assert(conf.auth_handler)launch_master = nilconf = nillaunch_slave(auth_handler)elselaunch_slave = nilconf.auth_handler = nilassert(conf.login_handler)assert(conf.command_handler)skynet.register(name)launch_master(conf)endend)
      end
      
    • 先看主服务,conf里的auth_handler肯定不要,交给从服务去验证,launch_slave函数也不要,给主服务注册一个别名可以用来区分这是主服务还是从服务

    • 主服务就好像是一个套接字入口,验证就交给从服务

    • 如果是比较大型的游戏,应该就一个登录节点,验证完之后,根据serverId转发到对应游戏服,这种设计登录服的压力比较大。

    • 直接游戏节点启一个登录服,客户端直接连登录服,然后转发到对应游戏服的网关就好了

    • 从服务,账号密码验证之后,这里要直接解析login.pb就好了,登录服只要注册一条协议就好了

    • load_config给配置环境加一个include函数 + 隔离全局,如果load使用全局环境的话,不能使用局部函数,如果不是局部函数会污染全局环境的环境,这样写配置文件里可以直接写 include "xxx"

  • skynet.start函数

    • function skynet.start(start_func)c.callback(skynet.dispatch_message)init_thread = skynet.timeout(0, function(_1, _2,_3,_4)print("init_service", _1, _2, _3, _4)skynet.init_service(start_func)init_thread = nilend)
      end
      
    • 这个函数是服务启动的入口,start_func是服务启动函数,c.callback(skynet.dispatch_message),注册lua消息回调函数,接下来执行skynet.timeout函数,0表示c 层会发一个 PTYPE_RESPONSE(1) 的消息回来,这时 session_id_coroutine[session] 对应的协程被唤醒,内部是创建一个协程去接受timeout的消息,session_id_coroutine[session] = co, session则表示唯一id,c层收到timeout发送的消息,lua层skynet.dispatch_message开始处理消息,skynet.dispatch_message是用lua虚拟机的主协程处理的,但是消息处理还是用的工作协程处理的,流程是唤醒timeout创建的协程,工作协程设置为当前唤醒的协程,执行start_func,start_func一般newservice会call其它服务,也会设计到协程挂起,skynet.call先发送一条lua消息到指定服务(launcher),然后设置session对应工作协程,挂起这个协程后,suspend的参数就是suspend(co, result, "SUSPEND"),执行完主协程的逻辑,等另外一个服务执行完初始化之后调response()给调用newservice服务发消息。

    • c驱动的回调就是主协程执行的

    • skynet.call

      • 获得一个session,注册一个session对应的工作协程,而不是调用co_create,然后挂起这个协程
    • launcher服务

      • 创建和管理lua服务的服务,command.LAUNCH(_, service, ...),在这个服务中接受的如果是lua消息类型,p.dispatch:lua层的消息类型回调函数,去协程池拿一个协程,设置session_coroutine_id[co] = session,session_coroutine_address[co] = source,然后协程执行launch_service(service, ...),根据skynet.context()拿到session,instance[inst] = response设置服务初始化好之后的回调函数,LAUNCHOK之后执行response()
    • skynet.queue

      • 比如agent服务,接收一条协议然后call挂起了agent服务,协议没处理完,current_thread = 当前运行的协程,引用+1,然后执行f挂起了,然后又来一条协议,由于当前协程不等于运行中的协程,就会塞进thread_queue里面,然后挂起这个协程,这个时候第一条协程开始回消息了,执行完之后,就开始wakeup后面一条协程,wakeup也就是插进wakeup_queue,也就是执行调度完这条协程,就立马执行了,相当于队列,伪代码如下

        local queue = skynet.queueskynet.start(function()local q = queue()skynet.dispatch("lua", function(seesion, _ , command, ...)q(skynet.call,A,"lua","xxx",...) --A服务可以sleep x秒再给retend)
        end
        
  • 协程

    • 如果主协程create一个协程,那么参数就是resume的参数,如果是挂起一个协程,那么resume协程的返回值是yield的参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/968106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站推荐!夸克资源网站里面的夸克资源社!

要说夸克资源站,最牛逼的当属公众号“资源社驿站" 旗下的“夸父资源社"和“网盘资源社"两个论坛了,可惜,这两个论坛已经一个多月无法打开,能恢复的希望越来越渺茫。那么,有什么替代网站可以选择吗…

iOS 抓包全流程指南,HTTPS 抓包、TCP 数据流分析与多工具协同的方法论

本文从工程角度解析 iOS 抓包流程:代理抓包、tcpdump/Wireshark 底层分析、TLS 握手排查、QUIC 处理,并说明如何在代理失败、pinning 或多协议场景下使用抓包大师(Sniffmaster)按 App/域名过滤并导出 pcap 做逐帧比…

【20章】MCP+A2A 从0到1构建商业级多Agent全栈应用

【20章】MCP+A2A 从0到1构建商业级多Agent全栈应用 学习地址:……/s/1x4nqeqImZvHrD7yVW7en-A 提取码:aa0d 在人工智能的发展历程中,我们正站在一个关键的转折点上。单个AI模型的能力已接近瓶颈,而复杂商业场景的需…

2025北京少儿编程机构实力榜单!妙小程逻辑思维提升/信奥赛冲刺/全年龄段课程可选

2025北京少儿编程机构实力榜单!妙小程逻辑思维提升/信奥赛冲刺/全年龄段课程可选随着人工智能产业的蓬勃发展,编程能力已成为青少年核心素养的重要组成部分,北京地区少儿编程培训需求持续攀升。专业的编程机构能通过…

优化的高光谱解混算法实现

高光谱解混是遥感图像处理中的重要技术,用于从混合像元中提取纯光谱特征(端元)和它们的比例(丰度)。 % 优化的高光谱解混算法 % 包含VCA、FCLS、SUnSAL、CLSUnSAL和基于深度学习的解混方法clear; close all; clc; war…

2025.11.17——1绿2蓝

普及+/提高 P9349 [JOI 2023 Final] 石子排列 2 / Stone Arranging 2 赛时T1 提高+/省选- P6879 [JOI 2020 Final] 集邮比赛 3 / Collecting Stamps 3 赛时T2,区间DP P9737 [COCI 2022/2023 #2] Lampice 赛时T3,很好…

2025年CNBD权威公开:淮安婚纱照拍摄十佳机构专业评测,弥素摄影工作室蝉联冠军宝座

在淮安这座历史文化名城,用镜头记录爱情最美的模样。 根据淮安市摄影行业协会最新数据,2024年淮安婚纱摄影市场规模预计突破1.2亿元,同比增长28%。其中高端定制服务需求增长显著,个性化拍摄套餐占比已达总需求的52…

cmake 安装 linux

要使用 CMake 安装在 Linux 系统上,通常需要以下步骤:? 1. 安装 CMake 方法一:使用包管理器(推荐) 大多数 Linux 发行版(如 Ubuntu, Debian, CentOS, Fedora 等)都提供了 CMake 的包。 Ubuntu/Debian: sudo ap…

clamav linux在服务器上如何部署

ClamAV是一种开源的杀毒软件,可以用于检测和清除恶意软件,包括病毒、蠕虫、特洛伊木马等。在Linux服务器上部署ClamAV可以提高服务器的安全性。以下是在Linux服务器上部署ClamAV的步骤:更新系统软件包:sudo apt-ge…

docker compose, minikube, kind, dev containers, wsl2

Comparison of Local Development ToolsTool Primary Use Case Pros ConsDocker Compose Running multi-container apps on a single host, general app development Simple YAML, easy to use for development workf…

小学生兴趣班避坑指南:2025年实力机构TOP5,妙小程AI编程领衔推荐

小学生兴趣班避坑指南:2025年实力机构TOP5,妙小程AI编程领衔推荐素质教育热潮下,小学生兴趣班选择难题破解,优质机构综合测评 随着“双减”政策的深化落实,素质教育成为小学生成长的核心发力点,兴趣班不再是“加…

2025 最新天津短视频运营公司推荐排行榜:权威测评实力企业,全链路服务赋能品牌增长天津抖音推广/天津网络推广/天津短视频推广公司推荐

引言 在数字化营销深度渗透的当下,短视频已成为企业品牌传播与用户转化的核心载体,市场对专业运营服务的需求持续攀升。为破解行业信息不对称、服务质量参差不齐的痛点,本次榜单由国际营销传播协会联合行业技术联盟…

人工神经网络MATLAB工具箱指南

MATLAB的神经网络工具箱提供了强大的功能,用于设计、训练和部署各种类型的神经网络。本指南将全面介绍如何使用MATLAB进行神经网络建模、训练和应用。 核心功能概览 MATLAB神经网络工具箱包含以下主要功能:神经网络创…

MATLAB基于小波变换的图像融合处理

1. 参数设置 % 图像参数 imageSize = [256, 256]; % 图像大小 waveletName = db1; % 小波基函数 level = 2; % 小波分解层数2. 读取并预处理图像 % 读取图像 img1 = imread(image1.png); % 替换为实际图像路径 img2 = …

OpenHarmony onDrag拖拽事件

1、onDragStart(enevt:event?:DragEvent,extraParams?:string)=> CustomBuilder | DragIltemInfo) 第一次拖拽此事件绑定的组件时,触发调用。 2、onDragEnter(event:(event?: DragEvent,extraParams?:string) …

2025年11月静音隔音设备最新推荐厂家,静音房、冲床静音房、设备静音房、测试静音房、隔音房、冲床隔音房、设备隔音房、测试隔音房

当前工业生产、实验室测试、商业办公等场景对静音隔音设备的需求愈发精细化,噪声控制精度、场景适配性、安装便捷性等核心诉求不断升级,但市场上设备厂家资质良莠不齐,部分产品存在隔音效果不达标、结构稳定性差、售…

check linux

您提到的 + #引号 + check linux + #引号 + 可能是指检查 Linux 系统的状态、配置或性能。以下是一些常见的 Linux 系统检查命令和脚本,帮助您了解系统运行情况:一、常用系统检查命令 1. 查看系统信息 uname -…

2025年11月安检门最新推荐厂家,手机安检门、贵金属安检门、高精度安检门、食品厂安检门、保密场所专用安检门​

当前,保密场所、食品厂、半导体企业等不同场景对安检门的需求日益精细化,设备的检测精度、场景适配性、稳定性等核心诉求不断提高。然而,市场上安检门厂家资质参差不齐,部分产品存在检测误差大、抗干扰能力弱、售后…

MATLAB实现的改进遗传算法用于有约束优化问题

基于MATLAB实现的改进遗传算法(GA)用于有约束优化问题的代码,包括处理非线性约束。此代码通过引入惩罚函数和修复机制,有效处理约束条件,提高算法的鲁棒性和收敛速度。 1. 定义优化问题 % 定义目标函数 function …

2025 最新声级计厂家推荐!多功能 / 数字 / 精密 / 防爆 / 手持式等全类型声级计品牌权威榜单,专业测评 + 高性价比厂家精选

引言 随着噪声管控成为全球环境治理与工业生产的核心议题,声级计作为精准测量噪声强度的关键工具,其性能与可靠性直接影响监测数据的有效性。据国际声学与振动协会(ISO/TC43)最新测评数据显示,全球合格声级计品牌…