自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(133)
  • 收藏
  • 关注

原创 skynet.dispatch与skynet.register_protocol

register_protocol 关心的是“消息是什么”——如何编码、解码,这是全局的、通用的定义dispatch 关心的是“收到消息后怎么办”——业务逻辑,这是每个服务私有的、特定的行为这种设计极大地提高了灵活性,可以定义一种通用的序列化格式(如 Protobuf),然后不同的服务可以根据自己的需求用不同的方式处理同一种格式的消息消息的格式和处理逻辑被完全分开了,网络层或消息队列只负责传递二进制数据。

2025-09-19 12:51:09 773

原创 基于skynet的配置加载-共享-热更分析

1. 启动配置管理服务 (constloader) 首先启动它立即调用 initial(),将所有配置文件通过 sharetable.loadfile 加载到共享内存服务完成初始化,等待接收消息2. 订阅其他需要关注配置变化的服务(如游戏逻辑服务)启动后,会调用 constloader 的 watch 方法进行订阅,constloader 将这些服务的地址记录下来3. 热更新。

2025-09-16 10:47:58 910

原创 基于跳跃表的zset实现解析(lua版)

zset是指有序集合,这是redis中的一种数据结构,可以存储成员和对应的分数,并且按照分数排序,原理是基于跳跃表实现。

2025-09-12 11:16:14 1186

原创 Skynet火焰图swt搭建

SWT 是一个用于 Skynet 的火焰图和调试工具,可以在运行时随时启停性能分析器,方便调试线上问题最近尝试接入swt,用于监控skynet节点服务状态以及debug,以下是接入时的一些心得,特此记录,仅供参考。

2025-09-11 14:49:02 596

原创 CentOS7下的ElasticSearch部署

选择 Java 11 对应的编号(通常为 /usr/lib/jvm/java-11-openjdk-*/bin/java)修改后需重启服务:sudo systemctl restart elasticsearch。应返回包含用户信息的 JSON 响应。按提示交互式设置新密码。

2025-07-18 19:29:59 766

原创 curl命令使用

输出目标 URL 的内容到终端2. 保存文件到本地HTTP 请求方法1. GET 请求(默认)2. POST 请求3. PUT 请求4. DELETE 请求5. GET 请求处理 HTTP 头部1. 添加自定义请求头2. 查看响应头文件上传与下载1. 上传文件2. 断点续传主要目的是从指定的 URL 下载文件。当下载过程因各种原因(如网络中断、系统崩溃等)中断后,再次使用该命令时,-C - 选项可以让 curl 尝试从上次中断的位置继续下载文件,实现断点

2025-07-15 19:31:56 496

原创 lua中检查静态常量是否正确引用

因在项目开发中会出现引用了不存在的常量,为了方便检查这种情况,所以想着添加针对性脚本check。

2025-07-11 10:57:47 291

原创 基于vmstat和ps的进程cpu-mem指标分析脚本

最近因项目中,需要对集群服务进行进程级别的压测,所以添加了基于vmstat和ps -aux指令的进程性能指标分析脚本,支持设置监测的起始时间戳与持续时长,以及监测频次,其中基于ps的监控脚本可支持设置目标进程,可进行常见场景下的压测,用于分析性能瓶颈15990324 K total memory 系统物理内存总量8829904 K used memory 已使用的物理内存11871544 K active memory 活跃内存2284688 K inactive memory 非活跃内存。

2025-06-27 14:50:58 810

原创 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 767

原创 skynet源码学习-skynet_server服务管理模块

【代码】skynet源码学习-skynet_server服务管理模块。

2025-06-19 10:53:06 1217

原创 skynet源码学习-skynet_main入口

【代码】skynet源码学习-skynet_main入口。

2025-06-18 12:22:08 401

原创 skynet源码学习-skynet_env守护进程

的全局配置存储,支持在C层和Lua层之间共享配置信息。功能:初始化环境变量系统。功能:获取环境变量值。

2025-06-17 19:47:21 865

原创 skynet源码学习-skynet_daemon守护进程

参数:pidfile - PID文件路径。功能:写入并锁定PID文件。功能:初始化守护进程。

2025-06-17 18:07:38 690

原创 skynet源码学习-skynet_monitor监控

检测服务间消息处理是否陷入死循环或长时间阻塞。

2025-06-16 19:48:15 1052

原创 skynet源码学习-skynet_malloc/malloc_hook内存分配模块

skynet的内存分配模块,它主要由三部分文件组成:malloc_hook.c、malloc_hook.h和skynet_malloc.h。这个模块的主要功能是提供内存分配函数,并跟踪每个服务(由handle标识)的内存使用情况。同时,它集成了jemalloc来提升内存分配性能。

2025-06-16 17:56:06 1098

原创 skynet源码学习-skynet_mq队列

设计要点:全局队列是服务队列的链表。参数:handle - 服务句柄。功能:将服务队列加入全局队列。功能:创建服务私有消息队列。

2025-06-13 11:03:41 1099

原创 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 796

原创 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 756

原创 shell中与>和<相关的数据流重定向操作符整理

在Shell中,< 和 > 相关的操作符主要用于输入输出重定向,输出重定向操作符 > 作用:将命令的标准输出覆盖写入到指定文件中,如果文件不存在,则创建该文件;如果文件已存在,则会清空文件内容后再写入(错误信息不会输入进去)>>>2>2>>&> 或 >&&>><<<<<<2> /dev/null

2025-05-30 18:20:06 898

原创 docker安装部署学习

Docker 是一种开源的容器化平台,用于将应用程序及其依赖打包成轻量级、可移植的容器,容器是一种标准化的软件单元,可以在任何支持 Docker 的环境中快速部署和运行,简单来说,Docker 解决了开发、测试和部署过程中 “环境不一致” 的难题。

2025-03-18 11:56:09 1208

原创 什么是session与token

Session是服务器为每个用户创建的临时身份凭证,用于跟踪用户在服务器端的活动状态,例如玩家登录后,服务器生成唯一Session ID(如a1b2c3d4),并在服务端存储对应的玩家数据(如用户ID、登录时间、角色属性等)

2025-03-13 12:24:51 1141

原创 TCP连接过程图解

TCP(传输控制协议)是一种面向连接、可靠传输的通信协议,属于互联网协议套件(TCP/IP)的核心协议之一,工作于传输层

2025-03-11 16:05:06 376

原创 linux下的网络抓包(tcpdump)介绍

抓包原理抓包工具通过将网络接口设置为混杂模式(Promiscuous Mode)来工作,在混杂模式下,网络接口会接收所有经过它的数据包,而不仅仅是目标地址为本机的数据包,抓包工具会捕获这些数据包,并将其存储或显示出来,以便后续分析数据包结构数据包通常由头部和数据两部分组成,头部包含了源地址、目的地址、协议类型、端口号等信息,而数据部分则是实际传输的内容,不同的协议有不同的头部结构,了解这些结构有助于分析数据包协议分析常见的网络协议如。

2025-03-11 12:33:08 1825

原创 centos中使用svn整理

上述命令会将 svn://localhost/svnrepo 仓库中的内容检出到 ~/myproject 目录。-m 参数用于添加提交说明,描述本次提交所做的更改。

2025-03-07 10:58:44 956

原创 MongoDB Compass 使用说明

功能:顾名思义,用于新增一个MongoDB的连接My Queries 通常是数据库管理工具(如 MongoDB Compass)中的一个功能模块,可保存、管理和复用自定义的查询语句,通过将常用的查询保存到 My Queries 中,用户可以避免每次使用相同查询时都重新输入,提高查询效率,同时也方便对查询进行组织和管理: 新增一个数据库refresh:刷新view:切换视图展示方式Sort by: 设置数据库/集合以什么方式排序↑/↓:设置正序或倒序(存储大小),(集合数量),indexes。

2025-03-06 12:13:09 4189

原创 MongoDB Compass中MONGOSH常用查询整理

MongoDB Compass 是一款可视化的 MongoDB 数据库管理工具,其中的 MongoSH(MongoDB Shell)提供了丰富的指令用于查找数据。

2025-02-28 19:41:01 1391

原创 linux命令行操作mongo整理

如果集合中的文档数量非常多,一次性显示所有文档可能不太方便,可以使用 skip() 和 limit() 方法进行分页查看。在 MongoDB 中,没有“表”的概念,与之对应的是“集合(collection)”,例如 global.users 中 global。若 MongoDB 启用了身份验证,需要在执行查询操作之前先进行身份验证。表明 MongoDB 启用了身份验证机制,而当前的会话没有提供有效的身份凭证,因此没有权限执行查询操作。若身份验证成功,db.auth() 方法会返回 1;

2025-02-28 17:44:40 1626

原创 DeepSeek本地化部署-windows版

Ollama 是一个开源的 AI 聊天机器人框架,它是一个通用、可扩展和灵活的平台,允许开发者构建复杂且高度定制化的智能系统主要特点通用性:Ollama 可以被集成到各种应用场景中,从简单的对话服务到复杂的 AI 应用可扩展性:开发者可以根据需求添加各种功能和模块,支持多种语言的交互灵活性:支持多种数据源(如文本、图像、音频等),能够生成多样的内容主要用途自然语言处理 (NLP) 应用编程自动化工具智能客服系统内容生成工具数据分析和预测官网地址。

2025-02-05 14:53:06 1262

原创 rust学习-rust中的保留字

保留字是语言中预定义的标识符,不能用作变量名、函数名或其他自定义标识符,Rust的保留字大致可以分为两类:已使用的保留字和未来可能使用的保留字。

2025-01-24 10:19:42 675

原创 rust学习-所有权

Rust 的所有权系统是其最大的特色之一,也是 Rust确保内存安全和避免空指针、数据竞争等错误的关键机制,所有权系统的核心概念包括所有权、引用和生命周期。

2025-01-22 17:33:10 1095

原创 rust学习-宏的定义与使用

过程宏需要一个特殊的 crate 类型,并且需要使用 proc_macro 库,常见的过程宏有:属性宏(attribute-like macros)、函数宏(function-like macros)和派生宏(derive macros)

2025-01-22 10:18:44 635

原创 rust学习-rust中的格式化打印

可以通过实现 std::fmt::Display 和 std::fmt::Debug trait 来为自定义类型定义格式化行为x: i32,y: i32,write!println!}", p);Display trait 用于定义类型的字符串表示,适用于用户友好的输出Debug trait 用于调试目的,提供详细的内部结构信息。

2025-01-21 12:07:47 1254 2

原创 rust学习-rust中的常量与变量

在Rust中,变量默认是不可变的(immutable),但可以通过关键字 mut 将其声明为可变的(mutable)常量是不可变的值,通常用于定义全局不变的数据,常量的生命周期是整个程序运行期间。Rust 可在声明变量时不立即初始化,但使用未初始化的变量会导致编译错误。Rust 支持类型推断,因此可以省略变量的类型声明。不可变变量一旦初始化,其值就无法再被修改。可变变量可在程序运行时修改其值。常量的作用域可以是全局或局部的。

2025-01-20 18:23:21 574

原创 rust学习-函数的定义与使用

println!");fn:定义函数的关键字say_hello:函数的名字():函数的参数列表,当前函数没有参数{}:函数体,包含了函数执行的代码。

2025-01-20 11:06:20 1201

原创 python中数据可视化库(Matplotlib)

Matplotlib可自定义图表的各种样式,包括线条颜色、线型、标记样式等plt.legend()#显示图例plt.grid(True)#显示网格线plt.show()

2025-01-17 18:10:00 600

原创 编写python代码的一些注意事项

1. 遵循 PEP 8:2. 使用注释:3. 有意义的命名:1. 模块化:2. 避免全局变量:3. 函数和类的设计:1. 使用 try-except 块:2. 合理使用 finally:3. 自定义异常:1. 避免不必要的计算:2. 使用内置函数和库:3. 使用生成器:4. 并行和并发:1. 编写单元测试:2. 代码调试:1. 输入验证:2. 加密敏感数据:3. 避免硬编码敏感信息:1. 使用版本控制系统:2. 代码审查:1. 编写文档:2. 注释和 docstrings:1. 避免过度工程:2. 代码复用

2025-01-13 19:26:45 662

原创 Python中的requests库介绍

定义头信息# 发送带自定义头的 GET 请求# 输出响应内容。

2025-01-07 09:22:10 518

原创 python中装饰器介绍

装饰器本质上是一个函数,它接受另一个函数作为参数,并在不改变原函数代码的情况下,扩展或修改它的行为,装饰器返回一个新的函数,这个新函数通常是对原函数的包装@decoratorpasspass。

2025-01-06 15:46:54 782

原创 Python中的OS库

在Python中os模块提供了许多与操作系统进行交互的功能,如文件和目录操作、环境变量访问、进程管理等。它是Python标准库的一部分,无需额外安装即可使用。

2025-01-04 21:34:19 2322

原创 python对redis的增删查改

在使用 redis-py 之前,需连接到 Redis 服务器,可使用 Redis 类来创建一个连接实例。集合中的元素是唯一的,不能直接更新,如果需要更新,可以先删除再插入。有序集合中的元素也可以通过修改分数来更新。

2025-01-04 20:49:18 555

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除