- 博客(199)
- 收藏
- 关注
原创 多房间 WebSocket 连接管理设计:从单例模式到多终端连接池
本文介绍了单机单worker部署下的WebSocket管理方案,重点解决直播弹幕、实时通知等场景中的连接管理问题。通过WebSocketManager单例模式确保全局唯一实例,管理房间池和用户映射,避免数据不一致。设计采用分层结构:单例管理多个RoomManager,每个房间支持多用户多连接。文章详细讨论了用户迁移逻辑、连接挂载层级,并对比了不同平台的房间策略。针对连接断开问题,提出了服务端通知前端断开和协程轮询两种解决方案,推荐采用事件驱动方式实现安全断开。最后强调应建立双重断开机制,包括消息通知、主动关
2025-07-16 11:45:38
949
原创 asyncio 与 uvloop
摘要: 事件循环是异步编程的核心机制,通过非阻塞调度实现并发任务执行。Python的asyncio库提供了标准事件循环实现,而uvloop基于libuv(Cython/C)提供了更高性能的替代方案,吞吐量可达asyncio的2-4倍。两者均适用于I/O密集型场景(如网络请求、数据库访问),但uvloop通过C层优化显著减少Python调度开销,不适用于Windows或CPU密集型任务。选择时需权衡性能与兼容性,高并发服务优先推荐uvloop。
2025-07-15 14:30:39
1007
原创 从 Alpha 到 Final:Python 各阶段版本到底该怎么用?
Python版本管理与核心架构解析 Python由非营利组织PSF主导维护,其标准实现CPython遵循严格的四阶段发布流程:Alpha(功能开发)、Beta(接口冻结)、RC(准正式版)和Final(稳定版),各阶段对应不同使用场景(如3.14版本预计2025年10月发布)。 关键技术演进聚焦于GIL优化:3.12引入子解释器独立GIL,3.13实验性支持无GIL构建,3.14将进一步强化多线程支持。CPython的C源码通常编译为动态库(如.dylib/.so),虚拟环境(.venv)仅包含运行时依赖,
2025-06-28 11:55:15
1850
原创 gRPC 使用(python 版本)
.proto文件概述 .proto文件是gRPC和Protocol Buffers的接口定义文件,用于描述数据结构和服务接口。它包含消息体(message)定义和服务(service)方法,作为客户端与服务端通信的规范。示例文件展示了proto3语法、包定义、RPC服务及请求/响应消息的结构。 代码生成与文件作用 使用protoc工具可自动生成客户端和服务端代码(如Python的_pb2.py和_pb2_grpc.py文件)。前者包含消息类型的序列化逻辑,后者提供RPC接口的桩代码。生成命令需指定输出路径和
2025-06-26 17:11:44
971
原创 gRPC 相关介绍
gRPC是一种高性能RPC框架,其核心技术包含两大核心组件:HTTP/2作为传输协议和Protocol Buffers作为序列化协议。HTTP/2提供多路复用、二进制传输等特性,显著提升性能;Protobuf则通过紧凑的二进制格式实现高效序列化。gRPC结合两者优势,使不同语言服务可以像调用本地函数一样进行远程通信,同时保证高效性和跨语言兼容性。测试时可用grpcurl工具与公开gRPC服务交互。gRPC的核心价值在于:一份服务定义(.proto)可生成多语言客户端,实现类型安全的高效远程调用。
2025-06-26 11:17:03
703
原创 go channel用法
Go语言中的channel是一种用于goroutine之间安全传递数据的类型化管道。它具有关键特性:类型安全、同步阻塞(默认无缓冲)、可选缓冲区以及可关闭机制。实际应用场景包括任务分发、信号通知和并发控制等。文章详细对比了无缓冲通道和缓冲通道的区别:无缓冲通道必须同步发送接收,否则会阻塞;缓冲通道则允许暂存数据。同时比较了普通int变量与channel的区别,强调channel专为goroutine间通信设计,无需复杂锁机制。通过类比传送带和工人的例子,形象说明了channel在并发编程中的优势。
2025-06-23 15:31:00
983
原创 go 里面的指针
Go语言指针摘要 Go指针存储变量内存地址,类似C语言但不支持指针运算和多重指针。主要特点: 通过&取地址,*解引用 自动解引用结构体指针字段 函数传指针可避免值拷贝 切片/map/channel为引用类型不需显式指针 与C的区别: 禁止指针算术 无野指针问题(GC管理) 指针传递仍是值传递(传递地址值) 应用场景: 修改函数外部变量 大结构体高效传递 方法接收者修改原对象 注意:Go为值传递语言,指针传递本质上传递的是地址值而非引用。
2025-06-09 14:58:27
563
原创 gorm 配置数据库
GORM是Go语言中功能强大的ORM库,支持多种数据库和丰富特性。本文介绍了GORM的基本配置方法,重点展示了PostgreSQL连接示例,包括初始化连接(InitPG)、获取实例(GetDB)和关闭连接(ClosePG)的实现。特别说明了GORM的连接池机制和并发安全性,使用时只需获取*gorm.DB实例,SQL执行后会自动归还连接。文章还区分了不同操作对连接池的影响,强调正确使用Rows()时必须手动关闭以防止连接泄漏。通过infra模块集中管理数据库配置,可提升项目的可维护性。
2025-06-08 22:45:48
586
原创 mysql错误码 2013 解决方案
摘要:针对脚本运行时频繁连接/关闭MySQL导致"Lost connection"错误(2013),本文提出一种轻量级连接管理方案。通过全局单例DBManager类维护数据库连接,实现连接复用和空闲超时释放机制。方案包含:1)线程安全的连接获取接口;2)30秒空闲自动释放;3)强制释放接口;4)避免频繁建立连接的成本。该方案有效解决了因短时高频连接、查询超时或网络波动导致的连接中断问题,特别适合长时间运行的数据库操作脚本。
2025-06-06 14:37:06
1107
原创 docker 部署 gin
Go语言部署优势与Docker实践 Go语言采用静态编译技术,直接将源代码编译为原生二进制可执行文件(ELF/Mach-O/PE格式),无需依赖运行时环境。通过go build命令生成的自包含二进制文件包含所有标准库和依赖,实现"一次编译,随处运行"的部署优势。相较于C/C++,Go具有更强的跨平台编译能力、更完善的标准库和更安全的并发模型。 在Docker部署中,采用多阶段构建策略:使用golang:alpine镜像编译生成二进制文件,然后以仅5MB的alpine基础镜像作为运行环境,
2025-06-01 20:10:18
1032
原创 gin 常见中间件配置
本文介绍了Gin框架中常用的四个中间件配置。安全头中间件通过设置多个安全相关的响应头来增强Web安全性,包括防iframe嵌套、禁止Referer泄露等功能。跨域中间件动态配置允许跨域访问的域名列表,并设置相关CORS参数。trace_id中间件为每个请求分配唯一ID用于日志追踪和链路分析。请求日志中间件记录请求和响应信息,包含请求方法、URL、IP、耗时等关键数据。这些中间件分别实现了Web安全防护、跨域请求处理、请求追踪和日志记录等核心功能,通过模块化的方式组织在middlewares目录下,为API服
2025-06-01 19:54:59
960
原创 gin 框架
Gin是一个高性能的Go语言Web框架,具有轻量、快速和优雅的特点,适用于构建RESTful API和微服务。其核心优势包括高性能路由、中间件支持、开发友好性以及丰富的生态系统。Gin采用同步编程模型,但通过Go的goroutine实现并发处理请求,提供简单易用的高并发能力。与FastAPI相比,Gin的并发机制更高效且无需显式异步语法。此外,Go语言与Docker等容器技术天然适配,适合云原生部署。项目地址:https://github.com/jacinli/gin-api-template
2025-06-01 19:21:09
1381
原创 go环境配置
本文介绍了Go语言开发环境的搭建与基础使用。首先讲解了如何下载配置Go环境变量,建议使用Go Modules进行依赖管理而非传统的GOPATH方式。文章详细对比了二者的区别,并演示了如何初始化go.mod文件和管理依赖。随后通过一个简单的Gin框架示例,说明了Go项目的文件组织结构和包管理机制,特别强调了与Python在模块导入方面的差异。此外还介绍了使用Air工具实现Go程序的热重载功能,类似于Python的uvicorn --reload。全文内容实用,涵盖了Go开发中的环境配置、包管理、项目结构和开发
2025-06-01 17:47:28
1466
原创 多角色多端状态控制与锁控制
摘要 本文针对多角色并发操作数据导致的冲突问题,提出系统化解决方案。通过分析典型审核场景(用户提交与运营审核并发),探讨了四种优化策略: 乐观锁机制:采用整型version或UUID版本号,确保写入前校验数据一致性,防止覆盖 状态流转约束:限定仅草稿状态允许编辑,避免审核流程中的并发修改 内容哈希校验:通过SHA256识别真实内容变更,减少无效提交 职责分离设计:将用户内容与审核状态拆分为两张表,实现物理隔离 方案对比显示,UUID乐观锁+拆表设计组合能有效解决多端并发冲突,同时提升系统可维护性。实施要点包
2025-05-25 15:58:51
861
原创 乐观锁与悲观锁
悲观锁与乐观锁对比总结 悲观锁: 核心思想:假设并发冲突高,读写前加锁(如SELECT FOR UPDATE),确保独占操作。 适用场景:强一致性需求(如库存扣减、金融交易),写冲突概率高。 缺点:性能开销大,易引发死锁。 乐观锁: 核心思想:假设并发冲突低,通过版本号/时间戳检测冲突,提交时校验(如UPDATE ... WHERE version=3)。 适用场景:读多写少(如配置管理、内容编辑),允许重试或失败。 缺点:需业务层处理冲突,高频写场景性能差。 选择建议: 悲观锁:确保数据绝对安全,接受性能
2025-05-25 15:56:14
695
原创 Mysql 中的锁
数据库锁机制简析 数据库通过锁机制保障并发访问时数据的一致性,主要分为物理层锁(表锁、行锁)和逻辑层锁(乐观锁、悲观锁)。InnoDB引擎默认采用行锁,仅锁定操作行,性能更优;而MyISAM使用表锁,粒度大但冲突率高。DDL操作(如ALTER TABLE)会加表锁,阻塞所有读写,需谨慎执行。UPDATE语句默认加行锁,若无索引可能退化为表锁。InnoDB的自动提交机制使单条SQL也隐含事务,执行完立即释放锁。优化建议:避免高峰期DDL、确保查询使用索引、合理选择锁策略。
2025-05-25 15:52:50
623
原创 rocketmq 环境配置[python]
本文介绍了在 M1 芯片的 MacBook 上使用 Python 开发 RocketMQ 的配置步骤。由于 RocketMQ 的 C++ SDK 仅支持 x86_64 架构,M1 芯片的 ARM 架构无法直接运行,因此需要通过 Rosetta 启动终端,并创建 x86_64 的 conda 环境来安装 RocketMQ 的 Python 客户端。文章详细说明了如何下载、安装和配置 librocketmq.dylib,并确保其路径正确。此外,还介绍了如何在腾讯云上配置 RocketMQ,包括创建 Topic
2025-05-16 15:09:39
1418
原创 什么是Rosetta?
Apple 的「动态二进制翻译器」Rosetta 2 允许基于 Intel 的 x86_64 应用在 Apple Silicon(M1/M2/M3,ARM 架构)上运行。通过 Rosetta 2,用户可以在 ARM 芯片上运行原本仅支持 Intel x86 架构的程序。使用方法简单,只需在终端中勾选“使用 Rosetta 打开”即可。Rosetta 2 适用于需要运行仅提供 x86 动态库的软件或某些旧的 brew 包。然而,如果所有环境和依赖都已迁移到 Apple Silicon 原生版本,则无需保留 R
2025-05-16 15:06:42
1197
原创 python模块搜索机制
Python 模块解析机制主要依赖于 sys.path,它决定了 Python 解释器查找模块的顺序。sys.path 的构建来源包括当前工作目录、脚本所在目录、PYTHONPATH 环境变量、Python 安装目录和 site-packages 目录。不同的启动方式(如直接运行脚本或使用 python -m)会影响 sys.path 的内容。相对导入在直接运行脚本时可能失败,推荐使用 python -m 或设置 PYTHONPATH。PyCharm 通过标记 Source Root 自动将目录加入 sys
2025-05-16 10:39:45
614
原创 cdn 是什么?
CDN(Content Delivery Network)是一种将内容分发到靠近用户的边缘服务器,以加速访问速度、减少延迟、降低源站压力的网络系统。CDN 把网站的静态资源(如 HTML、JS、CSS、图片、视频等)缓存在全球各地的边缘节点服务器上,用户访问内容时,不再请求源站服务器,而是就近从边缘节点获取资源,实现更快加载。图片、视频、CSS、JS、网页文件下载、直播流媒体、API 返回结果(某些场景下)用户请求某个资源(如图片);CDN 检查边缘节点是否缓存该资源;直接返回,快速响应。
2025-05-10 23:42:33
1434
原创 邮件协议、签名与推送
当你用 Gmail / Spark / iCloud 添加其他邮箱时,其实后台做了以下几件事:🔁 整合 = 一个邮箱壳子(客户端)用别人的账号密码登录并同步数据Gmail 网页是 Webmail,它底层仍然:📌 你看到的 HTTPS 只是前端网页浏览的UI层协议,不是邮件实际发送用的协议!邮件获取❓Spark / Apple Mail 等客户端是如何收邮件的?是 Gmail 主动推?还是客户端主动拉?✅ 答案是:主动拉取(Polling 或 IDLE),不是 Gmail 主动推送。⚠️ 注意:Gm
2025-05-04 21:40:36
1169
原创 cloudfare+gmail 配置 smtp 邮箱
这里介绍有一个域名后,不需要服务器,就可以实现 cloudfare+ gmail 的 邮箱收发。为什么还需要 gmail 的 smtp 功能,因为 cloudfare 默认只是对 email 进行转发,就是只能收邮件而不能发送邮件,故使用 gmail 的功能来进行代理 发送。,非常适合个人域名使用【因为可以有 200 个名称】!!!!发信:Gmail SMTP 发出(伪装.me 发件人)为什么需要这样配置,这样可以不被大厂作为黑名单从而不会发不出、收不到邮件。
2025-05-04 21:39:25
3281
原创 RTMP 协议解析 1
RTMP协议(Real-Time Messaging Protocol,实时消息传输协议)是由Adobe公司(最初由Macromedia开发)设计的一种用于实时传输音频、视频和数据流的网络协议,主要用于直播和流媒体传输,最初是为了让 Flash Player 和 Flash Media Server 之间进行音视频和数据的实时传输。现在虽然 Flash 被淘汰了,但 RTMP 这个协议因为其。
2025-04-26 23:17:01
930
原创 Git Flow分支模型
✅ Git 合并靠的是三方合并:找共同祖先 + 比较两边 diff 合并内容,而不是简单看提交指针或谁快谁慢!“哦你只是继续往 feat1 分支上加了一个提交,那我只需要合并 C3 的 diff 就行。那合并时,就会冲突,因为从共同祖先 B 开始,两边都对这行做了不同的修改。预发布分支(release/*)用于测试,测试完成合并到 main。适合快速迭代和持续部署的项目,只有一个主分支(main。用于日常开发,合并功能分支(feature/*);✅ 合并时不会乱套,也不会重复合并旧的提交。
2025-04-22 22:28:38
735
原创 FastAPI-MCP
开源地址: https://github.com/tadata-org/fastapi_mcpFastAPI-MCP 是一个开源项目,旨在简化 FastAPI 应用与现代 AI 代理(如基于大语言模型的系统)之间的集成。它通过自动将 FastAPI 的所有 API 端点暴露为符合 Model Context Protocol(MCP)标准的工具,使得 AI 代理能够直接调用和理解这些接口,整个过程无需额外配置,极大地降低了开发者的集成难度。
2025-04-20 22:56:40
920
原创 AutoGen参数说明
这样,其他的代理就可以查看这个列表,了解群聊的历史记录,以便做出相应的回应。因为这样提前发送的信息是manager作为发送方,assistant作为接收方,满足GroupChat的轮对话的过程,但请注意需要把content作为陈述句发送给assistant,否则新一次回答后会再次回复历史信息的问题。is_termination_msg 是一个函数,它接受一个字典形式的消息作为输入,并返回一个布尔值,表示这个接收到的消息是否是一个终止消息,即一个userproxy是否终止对话的标记。
2025-04-13 22:55:07
1142
原创 Mac配置开发环境
博主是一名Python后端开发,有时候环境太多 需要配置太多,故做此文章环境Macbook ,请注意自己的是ARM 还是x86 结构。
2025-04-13 22:49:17
968
原创 数据库预热
是在应用启动阶段,或,从而的一种优化手段当 FastAPI 或其他 Web 服务刚启动时:• 你虽然配置了数据库连接池(比如 SQLAlchemy、asyncpg);• 但其实它;• 第一个真实的请求进来时,才会;• 这个首次 handshake 连接建立 + TLS 认证等操作,可能耗时;⏳⚠️ 这在性能敏感系统(比如对外开放 API)中可能引起问题。数据库预热是通过在应用启动时提前“探路”数据库,
2025-04-12 21:18:33
1229
原创 Python装饰器
装饰器(Decorator) 是一个函数,它可以在不修改原函数代码的前提下,增强或修改函数的行为。本质上,装饰器就是“函数的函数”。
2025-04-06 16:05:21
955
原创 5G-A技术
最近的iOS 18.4 推送了 新功能,最引人注目的便是这个5G-A的这个功能,那什么是5G-A呢 ?目前北京 四环内 还是有能显示出5G-A标志的。🌐 一句话概括:✅ 5GA 是什么?5GA(5G Advanced)是 3GPP(全球通信标准组织)在Release 18中定义的5G演进技术标准,相较于当前的5G网络,5GA带来了更强的性能与智能化能力,主要体现在:📶 性能增强:• 速度更快:峰值下载速率预计可达 10Gbps+• 时延更低:可支持 <1ms 的超低延迟• 连接更多:更高密度设备连接,适
2025-04-01 23:30:07
5480
原创 APScheduler定时
🔍 背后原因:apscheduler 的 job 函数是同步调用的虽然我们使用的是 AsyncIOScheduler(支持 asyncio 的调度器),但是它 内部的 add_job() 方法要求传入的是一个 普通函数(sync function),而不是 async def 的协程函数。这个 wrapper() 是普通函数,apscheduler 就可以调度它,而它内部通过 asyncio.create_task() 启动了异步任务。🔧 APScheduler 本质机制:🔁 它内部怎么工作的?• s
2025-04-01 23:03:50
1065
原创 定时任务(python)
• 自由度高:可以灵活计算下一次执行时间。• 无需额外依赖,原生 asyncio 就能跑。• 跟 Redis 结合很好,可以做跨进程/跨机器任务协调。• 手动管理定时逻辑(get_next_run_time + asyncio.sleep())。• 多任务可能不好管理,比如暂停/重启某个 job。• 不支持 cron 表达式等复杂调度。import osself.push_interval_seconds = 600 # 推送间隔时间。
2025-04-01 23:02:37
916
原创 .git 文件夹
没错,.git/objects/ 里那些奇奇怪怪的哈希文件,其实就是 Git 真正存储所有数据的地方,它们不是普通的“文件”,而是 Git 自己的。这些文件夹名(如 1a)和文件名(如 2b3c…Git 有• 它们不是普通文本文件,是。• 你如果直接 cat 它们,会看到乱码。• 要查看内容,得用 Git 自己的工具来“解码”。你查看的是一个 commit 对象,它,不直接包含代码内容,而是指向一个 tree 对象,那个 tree 才是“这次提交的文件结构”。
2025-03-26 23:10:29
1209
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人