首页 > 其他分享 >skynet 实操篇

skynet 实操篇

时间:2024-07-29 22:24:47浏览次数:14  
标签:thread start 实操 skynet message main local

文章目录

概述

上一篇写完skynet入门篇,这一篇写点实操性质的。

demo

examples
对于一个开源框架,大部分都有他们自己的demo。先来看下这个examples下边有什么。

启动文件skynet_start

skynet_start
先看下这个函数,首先是配置文件,然后执行的是各种初始化,最后执行了start函数。

配置文件

配置文件
先看这个,start后边有个main;先看这个main.lua;看看里边有什么好玩的。

main.lua

local skynet = require "skynet"
local sprotoloader = require "sprotoloader"

local max_client = 64

skynet.start(function()
	skynet.error("Server start")
	skynet.uniqueservice("protoloader")
	if not skynet.getenv "daemon" then
		local console = skynet.newservice("console")
	end
	skynet.newservice("debug_console",8000)
	skynet.newservice("simpledb")
	local watchdog = skynet.newservice("watchdog")
	local addr,port = skynet.call(watchdog, "lua", "start", {
		port = 8888,
		maxclient = max_client,
		nodelay = true,
	})
	skynet.error("Watchdog listen on " .. addr .. ":" .. port)
	skynet.exit()
end)


看这个main,调用start函数,然后是启用服务protoloader,console服务,接下来是其他的几个服务。

start函数

lua里先调用start函数,看看这个里边有什么

start函数
这个里边东西还是有点多的。从大的方面,有几个线程:thread_monitor, thread_timer, thread_socket;然后就是thread_worker,这个线程是按权重分的。看看里边有什么。

thread_worker

thread_worker

skynet_context_message_dispatch 这个函数是个消息分发,分发完;执行的wait操作,等待激活。接下来看看消息分发。

skynet_context_message_dispatch

skynet_context_message_dispatch
这个就是从消息队列中取出消息,然后最后执行dispatch_message。

skynet_mq_pop

skynet_mq_pop

dispatch_message

dispatch_message

最后调用了

reserve_msg = ctx->cb(ctx, ctx->cb_ud, type, msg->session, msg->source, msg->data, sz);

小结

这篇主要梳理了skynet的流程,从skynet_start到配置文件,然后是各种类的初始化等操作,start,thread_work,到最后消息分发结束之后的挂起;等等。这些才是skynet从开始到最后的一个流程,当然,examples下面还有很多其他的内容,都可以按照这个思路去分析分析;当然,有兴趣,可以一起来学习学习。OK,结束。

标签:thread,start,实操,skynet,message,main,local
From: https://blog.csdn.net/Vjunjun/article/details/140779278

相关文章

  • git篇-- Git在项目实操中常见的使用命令--02
    Git是现代软件开发中不可或缺的版本控制工具。它能帮助开发者跟踪项目的所有变更,并与团队成员高效协作。本文将介绍一些在项目实操中常见的Git命令,帮助你更好地管理代码。1.初始化和配置初始化仓库在一个新的项目目录中,初始化Git仓库:gitinit配置用户信息在提交代码......
  • skynet热更新之inject
    游戏服务器的热更新是一种常见的需求,skynet可以通过inject的方式,来修改一个服务的消息处理函数,达到热更新的效果。skynet内置服务debug_consoleskynet自带了一个调试控制台服务。inject注入代码需要先启动这个服务。skynet.newservice("debug_console","127.0.0.1","9666")......
  • C# 12 新增功能实操!
    思维导航前言主构造函数集合表达式内联数组默认lambda参数任何类型的别名参考文章DotNetGuide技术社区交流群前言今天咱们一起来探索并实践C#12引入的全新功能!C#/.NET该如何自学入门?注意:使用这些功能需要使用最新的VisualStudio2022版本或安装.NET......
  • C# 12 新增功能实操!
    前言今天咱们一起来探索并实践C#12引入的全新功能!C#/.NET该如何自学入门?注意:使用这些功能需要使用最新的VisualStudio2022版本或安装.NET8SDK。主构造函数主构造函数允许你直接在类定义中声明构造函数参数,并自动生成相应的属性。主构造函数参数的最常见用途......
  • 直播预约丨《袋鼠云大数据实操指南》No.4:数据服务API实战解读,助力企业数字化跃迁
    近年来,新质生产力、数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮,持续冲击并革新着企业数字化转型的观念视野,昭示着一个以数据为核心驱动力的新时代正稳步启幕。面对这些引领经济转型的新兴概念,为了更好地服务于客户并提供切实可行的实践指导,自3月20日起,袋鼠云将推出全新......
  • YOLOv10全网最新创新点改进系列:YOLOv10改进ShuffleNetV2,手把手教学、保姆级实操、必须
    YOLOv10全网最新创新点改进系列:YOLOv10改进ShuffleNetV2,手把手教学、保姆级实操、必须有效涨点!!!所有改进代码均经过实验测试跑通!截止发稿时YOLOv10已改进40+!自己排列组合2-4种后,考虑位置不同后可排列组合上千万种!改进不重样!!专注AI学术,关注B站up主:Ai学术叫叫兽er!购买相关资......
  • 利用ChatGPT完成文献综述并高效撰写,全流程实操指南,附50+顶级提示词指令
    大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥(yida985)交流,多多交流,相互成就,共同进步,为大家带来最酷最有效的智能AI学术科研写作指南高级学术科研GPT专业版已全面升级,国际顶级应用满足各种学......
  • 只需五步3小时,借助ChatGPT撰写文献综述最强实操攻略,附顶级提示词和高级学术应用
    大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥(yida985)交流,多多交流,相互成就,共同进步,为大家带来最酷最有效的智能AI学术科研写作攻略。在确定研究方向后,进行文献综述是研究工作的关键步骤。......
  • 探索混合专家(MoE)模型预训练:开源项目实操
    探索混合专家(MoE)模型预训练:开源项目实操Mantaverse 来自知乎​目录收起MOE模型是什么实现Moe模型实现步骤拆解1.初始化和形状调整2.计算路由器的logits3.初始化和创建专家掩码4.循环计算专家层输出5.恢复形状并返回结果预训练效果对比DeepseekMoE结语......
  • ROS服务通信机制实操Python
    ROS服务通信机制实操Python步骤流程vscode配置服务端客户端编辑配置文件编译并执行优化实现参数的动态提交优化先启动客户端后启动服务端ROS服务通信的理论查阅:ROS服务通信流程理论ROS服务通信的自定义srv数据的准备可以查阅:ROS服务通信自定义srv在模型实现中,ROSm......