资讯详情

聊天室项目的文档创建及工具的封装

📅 2026/11/4 2:37:11 | 华诺云谱 👁 阅读
聊天室项目的文档创建及工具的封装
目录文档创建工具的封装文档创建复制前面最终的提示词版本粘贴到opencode即可使用时注意右上角的token消耗量及上下文窗口占用量。生成版本v1后查看是否符合需求删除冗余部分或让ai继续修改完善文档。文档完成后记得提交和推送到仓库。工具的封装logger.hpp、etcd.hpp、channel.hpp、es-icsearch.hpp、rabbitmq.hpp、asr.hpp封装需求文档先与大模型进行对话根据工具二次封装所需的需求生成提示词文档。找到自己满意版本后放到与SPEC同级的根目录PROMPT_spec.md保存后记得提交和推送到代码仓库。# 用途本提示词用于代码开发填充 code/server/common/ 下的工具封装并为每个封装写一个可运行的冒烟测试。它不用于生成 SPEC.md。不要在回复里输出需求文档、架构文档或验收标准文档。# 角色你是我这个 C 微服务聊天室项目的工具层开发工程师。# 仓库现状已存在不要重建、不要改名仓库根目录下code/ —— 源码根目录code/server/common/ —— 已有 6 个空头文件logger.hpp、etcd.hpp、channel.hpp、icsearch.hpp、rabbitmq.hpp、asr.hppcode/server/{file,friend,gateway,message,transmit,user}/ —— 子服务目录本阶段不要动third/ —— 第三方依赖tool/ —— 工具test/ —— 测试目录与 code 同级本次测试代码统一放 test/common/SPEC.md —— 项目规格本阶段不要改动注意头文件名以仓库里实际存在的为准。是 icsearch.hpp不是 es-icsearch.hpp没有 httplib.h本次不做 HTTP 封装。# 目标平台与约定- 平台LinuxUbuntu 22.04gcc 11CMake 3.22C17。- 命名空间统一使用 chat不污染全局命名空间。- 封装实现文件放 code/server/common/与头文件同名logger.cpp、etcd.cpp、channel.cpp、icsearch.cpp、rabbitmq.cpp、asr.cpp。- 测试文件放 test/common/每个封装一个带 main()可独立编译运行。- 已安装依赖spdlog、etcd-cpp-apiv3、brpc、elasticlient含 jsoncpp、libcurl、rabbitmq-c、百度语音识别 SDK、gflags、gtest、protobuf、redis、ODB。# 任务与顺序严格按此顺序一次只做一个1 logger.hpp / logger.cpp test/common/test_logger.cpp2 etcd.hpp / etcd.cpp test/common/test_etcd.cpp3 channel.hpp / channel.cpp test/common/test_channel.cpp4 icsearch.hpp / icsearch.cpp test/common/test_icsearch.cpp5 rabbitmq.hpp / rabbitmq.cpp test/common/test_rabbitmq.cpp6 asr.hpp / asr.cpp test/common/test_asr.cpp每完成一个停下来等我确认继续再做下一个。不要一次性输出全部 6 个。# 统一约束1. 只做工具封装不写业务逻辑不出现 user / friend / message 等业务字段。2. 不引入新的第三方库只用上面列出的依赖。3. 不引入配置框架、依赖注入、工厂模式、插件机制等额外抽象。课程设计要求什么就做什么。4. 每个头文件自包含单独 include 即可编译不依赖包含顺序。5. 已有空头文件直接在原文件里补内容不要改文件名、不要删除重建、不要新建同名的另一份。6. 编译必须通过 -Wall -Wextra 且无警告禁止使用 C20 特性。7. 每个封装说明线程安全性哪些接口可多线程调用哪些必须在初始化阶段调用。8. 每个头文件末尾用注释附一段最小使用示例不超过 15 行。9. 不要生成 README、不要生成设计文档。10. 不要修改除当前封装与对应测试外的任何文件CMake 变更单独列出由我确认后落盘。# 构建约定- code/server/common/CMakeLists.txt把 6 个 .cpp 编成静态库 server_common依赖以 PUBLIC 方式链接。- test/CMakeLists.txt为每个测试 .cpp 生成一个可执行文件test_logger、test_etcd ...链接 server_common。- 根 CMakeLists.txt 的添加顺序先 add_subdirectory(code/server)再 add_subdirectory(test)保证 server_common 已定义。- 根 CMakeLists.txt 与 code/server/CMakeLists.txt 若不存在给出建议内容但不要擅自覆盖已有文件。# 逐个封装的规格来自课程设计按此实现不要自由发挥## 1 logger.hpp —— spdlog 二次封装设计原因- 避免单例的锁冲突直接创建一个全局的、线程安全的日志器来使用。- 原生日志不带文件名和行号需要用宏做二次封装把文件名和行号输出出来。- 需要一个初始化接口调试模式输出到标准输出非调试模式输出到文件。能力要求- 全局初始化接口参数为运行模式 bool、输出文件名、输出日志等级。- 带文件名行号的日志宏至少 debug / info / warn / error 四档。- 未初始化时调用日志宏行为要明确例如回退到标准错误不能崩溃。验收调试模式日志进 stdout发布模式日志进指定文件日志行含文件名与行号多线程并发写不崩溃、不乱序。## 2 etcd.hpp —— etcd-cpp-apiv3 二次封装设计原则尽量减少模块间耦合。etcd 本质是键值存储不要写死成注册中心专用接口键值语义要保留。两类客户端A. 服务注册客户端- 接口向 etcd 新增一条服务信息并保持存活。- 参数注册中心地址、服务信息服务名 → 主机地址的键值对。- 必须包含租约与自动续租析构时注销。B. 服务发现客户端- 接口一设置根目录获取该目录下全部数据并监控变化。- 接口二设置服务上线事件回调数据新增。- 接口三设置服务下线事件回调数据删除。- 启动后持续监听不阻塞调用线程。验收注册后 etcdctl 能查到对应 key进程退出或租约失效后 key 消失发现端能收到上线/下线回调。## 3 channel.hpp —— brpc 信道封装设计原则封装的是服务节点的通信信道管理不是 rpc 调用管理。rpc 调用仍由业务侧直接发起。能力要求- 单个服务的信道管理类一个服务可能有多个节点每个节点一个 brpc Channel维护服务名 → 多 Channel映射采用 RR 轮转取用。- 总体信道管理类管理多个服务的信道管理对象按服务名获取对应信道。- 提供接口服务节点列表更新配合服务发现发现端变更后刷新信道。- 提供接口按服务名获取一个可用 Channel。验收同服务多节点时轮转命中节点列表更新后不再分配到已下线节点服务不存在时返回明确错误而非崩溃。## 4 icsearch.hpp —— ES 客户端二次封装使用注意课程明确要求- ES 地址后面不要忘记相对根目录例如 http://127.0.0.1:9200/。- 所有 ES 客户端 API 调用必须做异常捕获否则操作失败会导致程序异常退出。能力要求封装四个操作——索引创建、数据新增、数据查询、数据删除。- 索引创建能动态设定索引名称与索引类型能动态添加字段并设置字段类型、分词器类型、是否构造索引。- 核心工作量在请求正文的构造按固定 JSON 格式构造 Json::Value 对象。- 查询与删除按索引 条件/ID 操作返回结构化结果不把 ES 原始响应直接抛给业务层。验收能创建带 mapping 的索引插入文档后能按条件查到ES 不可用时异常被捕获并转为可处理错误进程不退出。## 5 rabbitmq.hpp —— rabbitmq-c 二次封装封装思想- 把事件循环 loop、连接 connection、信道 channel 封装起来业务层不直接接触。能力要求- 提供创建交换机、创建队列、并将二者直接绑定的接口。- 提供向指定交换机发布消息的接口。- 提供订阅指定队列消息的接口回调形式。- 连接参数地址、端口、账号、密码、vhost通过初始化接口传入。- 明确线程模型发布与消费是否可在不同线程回调在哪个线程执行。验收发布消息后订阅端能收到交换机和队列可重复声明不报错连接断开时返回明确错误。## 6 asr.hpp —— 百度语音识别 SDK 二次封装封装思想- 封装一个语音识别客户端类。- 构造函数中传入语音识别平台的 key 相关信息app_id / api_key / secret_key。- 提供一个语音识别接口输入参数是语音数据返回值是转换后的文字。能力要求- 只做一件事音频数据进文本出。- 失败时返回明确错误空结果 错误信息或异常二选一并说明理由不要静默吞掉。- 明确线程安全性同一个客户端对象能否并发调用。验收给定一段音频能返回文字网络不可达时返回明确错误而不崩溃重复初始化不泄漏资源。# 测试文件要求- 每个 test_xxx.cpp 自带 main()只测本封装的最小路径不连其他子服务。- 输出 PASS / FAIL失败时返回非 0 退出码。- 依赖外部服务的测试etcd、rabbitmq、ES、语音平台要能读到环境变量配置地址服务不可达时输出 SKIP 并以 0 退出不能卡死。- 测试代码同样遵守 -Wall -Wextra 无警告。# 每个封装的输出格式1. 文件路径头文件、源文件、测试文件2. 完整代码3. 需要追加的 CMake 片段不落盘等我确认4. 3 行以内的运行验证方法# 开始之前先只回复三件事不要写代码1. 你打算采用的命名空间与文件组织方式2. 6 个封装各自依赖的第三方库与链接顺序3. 规格里存在歧义、需要我先确认的点最多 3 条。我确认后再开始第 1 个 logger.hpp。工具封装的实现PROMPT_spec.md 先完整读这个文件按它执行。严格按开始之前的要求只回答三个问题不要写代码。封装时记得查看封装的实现代码和测试用例gtest实现单元测试封装生成测试过程中cmake会生成很多临时文件我们不需要提交创建.gitignoer,写入临时文件所在的目录下
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑