skynet
文章平均质量分 87
skynet学习
Colin♛
我思故我在
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
基于skynet框架的一种游戏服登录模块设计
核心逻辑依赖2个服务模块,中心服务(center)和登录服务(login)原创 2025-10-17 20:05:58 · 935 阅读 · 0 评论 -
skynet.newservice接口分析
执行流程:在 launcher.lua 中:这是一个空的启动函数,即launcher 服务启动后立即进入消息循环状态,等待处理命令NORET 是一个特殊标记,表示这个命令不会立即返回结果skynet.launch 的底层实现skynet.launch 是 C 函数,在 skynet_server.c 中实现:它调用底层的 skynet_command 函数,命令为 “LAUNCH”关键点: 服务启动是异步的!时序图:服务初始化完成的通知当新服务初始化完成后,会通过文本协议通知 launch原创 2025-10-11 15:37:39 · 427 阅读 · 0 评论 -
skynet debug_console控制台中debug指令使用
在skynet的debug会话中,原创 2025-10-10 16:09:14 · 394 阅读 · 0 评论 -
skynet-socket.lua源码分析
Skynet定义了7种socket消息类型。可以把socket.lua想象成一个。原创 2025-09-30 10:50:06 · 1066 阅读 · 0 评论 -
基于skynet框架业务中的gateway实现分析
这是最底层的网关服务器实现,封装了Skynet的socket操作,提供TCP连接管理的基础框架,其内部注册了"socket"类型的协议,通过gate将gate中的"socket"类型调用到gateserver中的对于指令。业务级别网关服务实例,增加了业务逻辑,如用户认证、超时检查等,启动网关服务时每个节点只需要启动一个就行,因为网络线程只有一个,启动后可以调用"lua"类型消息open,开启网关服务。主要分2类,一类是处理socket类型消息,一类是lua类型消息。原创 2025-09-30 09:34:26 · 1001 阅读 · 0 评论 -
skynet.dispatch与skynet.register_protocol
register_protocol 关心的是“消息是什么”——如何编码、解码,这是全局的、通用的定义dispatch 关心的是“收到消息后怎么办”——业务逻辑,这是每个服务私有的、特定的行为这种设计极大地提高了灵活性,可以定义一种通用的序列化格式(如 Protobuf),然后不同的服务可以根据自己的需求用不同的方式处理同一种格式的消息消息的格式和处理逻辑被完全分开了,网络层或消息队列只负责传递二进制数据。原创 2025-09-19 12:51:09 · 926 阅读 · 0 评论 -
基于skynet的配置加载-共享-热更分析
1. 启动配置管理服务 (constloader) 首先启动它立即调用 initial(),将所有配置文件通过 sharetable.loadfile 加载到共享内存服务完成初始化,等待接收消息2. 订阅其他需要关注配置变化的服务(如游戏逻辑服务)启动后,会调用 constloader 的 watch 方法进行订阅,constloader 将这些服务的地址记录下来3. 热更新。原创 2025-09-16 10:47:58 · 956 阅读 · 0 评论 -
skynet源码学习-socket_server相关模块
主要分析文件:socket_buffer.h、socket_epoll.h、socket_info.h、socket_kqueue.h、socket_poll.h、socket_server.h、socket_server.c。原创 2025-06-23 10:58:57 · 825 阅读 · 0 评论 -
skynet源码学习-skynet_server服务管理模块
【代码】skynet源码学习-skynet_server服务管理模块。原创 2025-06-19 10:53:06 · 1260 阅读 · 0 评论 -
skynet源码学习-skynet_main入口
【代码】skynet源码学习-skynet_main入口。原创 2025-06-18 12:22:08 · 476 阅读 · 0 评论 -
skynet源码学习-skynet_env守护进程
的全局配置存储,支持在C层和Lua层之间共享配置信息。功能:初始化环境变量系统。功能:获取环境变量值。原创 2025-06-17 19:47:21 · 944 阅读 · 0 评论 -
skynet源码学习-skynet_daemon守护进程
参数:pidfile - PID文件路径。功能:写入并锁定PID文件。功能:初始化守护进程。原创 2025-06-17 18:07:38 · 718 阅读 · 0 评论 -
skynet源码学习-skynet_monitor监控
检测服务间消息处理是否陷入死循环或长时间阻塞。原创 2025-06-16 19:48:15 · 1075 阅读 · 0 评论 -
skynet源码学习-skynet_malloc/malloc_hook内存分配模块
skynet的内存分配模块,它主要由三部分文件组成:malloc_hook.c、malloc_hook.h和skynet_malloc.h。这个模块的主要功能是提供内存分配函数,并跟踪每个服务(由handle标识)的内存使用情况。同时,它集成了jemalloc来提升内存分配性能。原创 2025-06-16 17:56:06 · 1173 阅读 · 0 评论 -
skynet源码学习-skynet_mq队列
设计要点:全局队列是服务队列的链表。参数:handle - 服务句柄。功能:将服务队列加入全局队列。功能:创建服务私有消息队列。原创 2025-06-13 11:03:41 · 1146 阅读 · 0 评论 -
skynet源码学习-skynet_handle服务句柄管理
1. handle_name 结构2. handle_storage 结构(核心管理结构)1. void skynet_handle_init(int harbor)2. uint32_t skynet_handle_register(struct skynet_context *ctx)3. int skynet_handle_retire(uint32_t handle)4. void skynet_handle_retireall()原创 2025-06-12 11:15:38 · 811 阅读 · 0 评论 -
skynet源码学习-skynet_timer定时器
时间轮分为5个数组:- near: 一个大小为256的数组,表示最近256个单位时间(10ms)内将要触发的定时器1. skynet_timer_init()2. skynet_timeout(handle, time, session)3. timer_add(T, arg, sz, time)4. add_node(T, arg, sz, time)5. timer_shift(T)6. timer_execute(T)7. dispatch_list(current)原创 2025-06-10 14:03:25 · 811 阅读 · 0 评论 -
skynet中使用skynet.call需要注意挂起的场景
在 skynet 框架中,skynet.call是一个同步调用函数,它会阻塞当前服务直到目标服务返回结果。这意味着如果目标服务执行时间很长或者没有返回结果,当前服务就会处于挂起状态,这可能会导致整个系统的性能下降或甚至崩溃,或因挂起导致逻辑重入,引发错误。原创 2024-12-24 09:37:46 · 575 阅读 · 0 评论 -
skynet-skynet_module解析
中定义了 skynet 框架中用于管理模块的相关结构体和函数声明,框架可以灵活地扩展功能,实现高度的模块化。(1).c 的形式命名的,意味着在 skynet 框架中定义 C 模块时,建议使用 service_ 作为文件名的前缀,以便于在 Makefile 中进行统一的编译和链接处理。: 通过将模块的创建、初始化、释放等功能封装在模块管理器中,实现了模块化设计,提高了代码的可维护性和可扩展性。指向skynet模块的指针,用于与该服务相关联的模块管理。服务的句柄,用于标识唯一的服务实例。原创 2024-04-06 00:06:25 · 1214 阅读 · 1 评论 -
【基于skynet的热更思考】
可以在运行时动态加载 Lua 代码文件,然后调用其中定义的函数,通过修改模块及其函数的upvalue,实现代码的动态注入和执行。这两段核心代码实现了一个动态加载和执行 Lua 代码的功能,通过构建环境表、加载代码并执行,最终返回执行结果。这个函数是实现动态注入功能的关键部分,能够实现在 Skynet 框架中动态加载并执行 Lua代码,完成注入热更脚本。用于调整传入的地址参数,对传入的地址参数进行转换,以保证将热更脚本注入到正确的服务地址。以二进制只读的方式读取文件内容。存放读取到的热更脚本内容。原创 2024-03-23 10:23:46 · 1379 阅读 · 0 评论 -
skynet cluster集群笔记
skynet 是一个基于事件驱动的分布式游戏服务器框架,支持构建高性能、高并发的网络程序。skynet 中的节点是指运行着 skynet 实例的独立服务器。每个节点都有自己的地址和唯一标识符,可以运行不同的服务。节点之间通过网络连接进行通信和协作。在 skynet 中,服务是指运行在节点上的具体功能模块。每个服务都有一个唯一的服务名标识符,可以通过该标识符进行访问和通信。服务可以在同一节点上运行,也可以跨节点部署。skynet 中的集群是指多个节点连接在一起,共同组成一个分布式系统。原创 2024-03-10 13:28:44 · 2633 阅读 · 1 评论 -
skynet-debug console指令集整理
在skynet中,nc调试台是一个用于在运行中的skynet服务和调试器之间建立交互的工具。通过命令行与运行在skynet环境中的服务进行交互和调试,PS: 这里的nc调试台和linux系统中的netcat工具是不同的概念。原创 2024-01-18 12:03:30 · 1777 阅读 · 0 评论 -
skynet优化思考
skynet框架的网络模块是基于socket实现的,但socket本身有很多瓶颈,例如上下文切换,内存拷贝等,因此,可以尝试使用更高性能的网络库(如Libuv),以提高网络性能。skynet框架是基于协程的,通信也是通过协程来实现的,在高并发的情况下,网络通信可能会成为瓶颈,可以考虑对通信机制进行优化,比如使用IO多路复用技术等。对于skynet中的actors,怎样合理分配资源的问题也是需要考虑的,可以通过对调度算法进行优化,使其合理使用CPU和内存资源,从而提高框架的性能。使用更高性能的网络库。原创 2023-10-27 17:18:47 · 568 阅读 · 1 评论
分享