skynet 实操篇

文章目录

概述

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

demo

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

启动文件skynet_start

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

配置文件

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

main.lua

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函数,看看这个里边有什么

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

thread_worker

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

skynet_context_message_dispatch

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

skynet_mq_pop

dispatch_message

最后调用了

c++ 复制代码
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,结束。

相关推荐
爱吃生蚝的于勒4 分钟前
QT开发第三章——常用控件
linux·服务器·开发语言·前端·javascript·c++·qt
Shadow(⊙o⊙)32 分钟前
QT常用控件1.0,enabled() geometry() QIcon的.qrc文件导入
开发语言·c++·qt
wuminyu36 分钟前
Java锁膨胀机制之偏向锁到轻量级锁源码剖析
java·linux·c语言·jvm·c++
葱卤山猪43 分钟前
二进制字节流序列化
c++·序列化
Lazionr43 分钟前
类和对象(中):对象生命周期与运算符重载
c++
凡人叶枫1 小时前
Effective C++ 条款13:以对象管理资源(RAII)
java·linux·开发语言·c++·嵌入式开发
星恒随风1 小时前
C++ 类和对象入门(六):友元、内部类、匿名对象和编译器优化
开发语言·c++·笔记·学习·状态模式
Irissgwe1 小时前
C++ STL 详解:stack 和 queue 的介绍使用与模拟实现
c++·stl·queue·stack
油炸自行车1 小时前
【bug】Qt 6 Q_NAMESPACE 跨 DLL 链接错误:LNK2019 无法解析 staticMetaObject
数据库·c++·qt·bug·link2019·q_namespace_exp·namespaceexport
插件开发1 小时前
英伟达cuda程序通用性关键 geforce 20xx代到最新版 在20xx上编译的c++程序可以通用吗?
java·c++·人工智能