资讯动态

【AI大模型接入SDK】ChatServer 路由规则绑定

发布时间:2026/10/23 7:50:48 来源:尧图企业网站定制
个人主页艾莉丝努力练剑❄专栏传送门《C语言》《数据结构与算法》《C/C干货分享学习过程记录》《Linux操作系统编程详解》《笔试/面试常见算法从基础到进阶》《Python干货分享》⭐️为天地立心为生民立命为往圣继绝学为万世开太平 艾莉丝的简介文章目录1 ~ ChatServer 路由规则绑定1.1 业务背景1.2 类定义扩展1.2.1 结构体与类完整声明1.3 路由规则实现 setHttpRoutes1.3.1 源文件实现代码1.4 路由绑定函数调用时机1.4.1 核心约束1.4.2 start () 完整实现含静态资源挂载2 ~ httplib 静态资源挂载2.1 静态资源概念3 ~ 开发规范与面试要点3.1 路由开发规范3.2 调用时序重点面试高频3.3 线程模型说明3.4 REST API 设计对应关系汇总表4 ~ 易错点总结结尾1 ~ ChatServer 路由规则绑定1.1 业务背景ChatServer 已经完成 7 个业务处理成员方法的编码实现。核心问题HTTP 客户端发起网络请求服务器如何将收到的请求分发到对应的业务处理函数。解决方案配置 HTTP 路由绑定规则建立「HTTP 请求 (请求方法 URI 路径)」与「类成员处理函数」映射关系。开发最佳实践实现一个业务处理方法立刻绑定一条路由全部写完再统一绑定极易出现请求与处理函数匹配错误。路由校验三要素每条路由必须核对HTTP 请求方法GET/POST/DELETE 等请求 URI 路径支持路径占位符如/api/session/${session_id}绑定的业务处理回调函数1.2 类定义扩展1.2.1 结构体与类完整声明namespaceai_chat_server{// 服务器配置结构体structServerConfig{std::string chatGPTAPIKey;// chatGPT API Key// ollama大模型配置std::string ollamaModelName;// ollama模型名称std::string ollamaModelDesc;// ollama模型描述std::string ollamaEndpoint;// ollama API地址std::string host;// http服务监听地址uint16_tport;// http服务监听端口};classChatServer{public:ChatServer(constServerConfigconfig);~ChatServer();boolstart();// 启动服务器voidstop();// 停止服务器boolisRunning()const;// 查询服务器运行状态private:// 通用响应构造工具函数std::stringbuildResponse(conststd::stringmessage,boolsuccessfalse);// 7个业务请求处理回调函数voidhandleCreateSessionRequest(consthttplib::Requestrequest,httplib::Responseresponse);voidhandleGetSessionListsRequest(consthttplib::Requestrequest,httplib::Responseresponse);voidhandleGetModelListsRequest(consthttplib::Requestrequest,httplib::Responseresponse);voidhandleDeleteSessionRequest(consthttplib::Requestrequest,httplib::Responseresponse);voidhandleGetHistoryMessagesRequest(consthttplib::Requestrequest,httplib::Responseresponse);voidhandleSendMessageRequest(consthttplib::Requestrequest,httplib::Responseresponse);voidhandleSendMessageStreamRequest(consthttplib::Requestrequest,httplib::Responseresponse);// 新增HTTP路由规则绑定函数voidsetHttpRoutes();private:ServerConfig _config;// 服务器配置信息std::unique_ptrhttplib::Server_chatServer;// httplib HTTP服务实例std::shared_ptrai_chat_sdk::ChatSdk_chatSdk;// chat sdk实例std::atomicbool_isRunning{false};// 服务运行状态原子变量};}1.3 路由规则实现 setHttpRoutes1.3.1 源文件实现代码使用 httplib 库捕获this指针lambda 内部调用类的私有成员处理函数lambda 参数必须为 const 引用避免拷贝。#includeChatServer.hnamespaceai_chat_server{voidChatServer::setHttpRoutes(){// 1. 创建会话请求 POST /api/session_chatServer-Post(/api/session,[this](consthttplib::Requestrequest,httplib::Responseresponse){handleCreateSessionRequest(request,response);});// 2. 获取会话列表 GET /api/sessions_chatServer-Get(/api/sessions,[this](consthttplib::Requestrequest,httplib::Responseresponse){handleGetSessionListsRequest(request,response);});// 3. 获取模型列表 GET /api/models_chatServer-Get(/api/models,[this](consthttplib::Requestrequest,httplib::Responseresponse){handleGetModelListsRequest(request,response);});// 4. 删除会话 DELETE /api/session/{session_id}_chatServer-Delete(/api/session/{session_id},[this](consthttplib::Requestrequest,httplib::Responseresponse){handleDeleteSessionRequest(request,response);});// 5. 获取会话历史消息 GET /api/session/{session_id}/history_chatServer-Get(/api/session/{session_id}/history,[this](consthttplib::Requestrequest,httplib::Responseresponse){handleGetHistoryMessagesRequest(request,response);});// 6. 发送消息【全量返回】 POST /api/message_chatServer-Post(/api/message,[this](consthttplib::Requestrequest,httplib::Responseresponse){handleSendMessageRequest(request,response);});// 7. 发送消息【流式增量返回】 POST /api/message/async_chatServer-Post(/api/message/async,[this](consthttplib::Requestrequest,httplib::Responseresponse){handleSendMessageStreamRequest(request,response);});}}1.4 路由绑定函数调用时机1.4.1 核心约束必须在listen()监听启动之前完成路由绑定一旦服务开始监听接收客户端请求后续新增路由不会生效。在ChatServer::start()启动函数内部调用setHttpRoutes()。http 服务运行在独立子线程防止阻塞主线程使用detach()分离线程。1.4.2 start () 完整实现含静态资源挂载namespaceai_chat_server{boolChatServer::start(){// 原子变量判断服务是否已经运行if(_isRunning.load()){ERR(ChatServer is running!!!);returnfalse;}// 【第一步】绑定全部HTTP路由规则listen之前执行setHttpRoutes();// 【第二步】设置静态资源挂载点// mount_point/ 代表http根路径映射到磁盘 ./www目录// 浏览器访问 http://ip:port 会自动寻找 ./www/index.html_chatServer-set_mount_point(/,./www);// 启动独立线程运行http服务避免阻塞主线程std::threadserverThread([this](){INFO(ChatServer start on {}:{},_config.host,_config.port);_chatServer-listen(_config.host,_config.port);});// 线程分离后台运行serverThread.detach();// 修改运行状态标记_isRunning.store(true);INFO(ChatServer start success!!!);returntrue;}voidChatServer::stop(){if(!_isRunning.load()){ERR(ChatServer is not running!!!);return;}if(_chatServer){_chatServer-stop();}_isRunning.store(false);}}2 ~ httplib 静态资源挂载2.1 静态资源概念静态资源网页 html、css、js、图片等不需要后端动态计算直接返回磁盘文件的资源。set_mount_point(mount_point, dir)接口说明mount_pointhttp 访问 url 前缀路径/代表 http 根路径。dir磁盘本地目录路径示例./www代表可执行程序 exe 同级目录下的 www 文件夹。默认首页行为httplib 库当浏览器仅访问http://ip:port不带资源路径时库内部自动查找index.html作为默认返回页面。前端页面开发约定前端入口页面固定命名为index.html放置到./www目录。3 ~ 开发规范与面试要点3.1 路由开发规范开发顺序写完 1 个业务处理函数立刻绑定 1 条路由不要全部写完再批量绑定。每条路由校验三项HTTP 方法、URI 路径、回调处理函数。路径占位符语法{param_name}httplib 可以自动捕获 url 路径中的参数。lambda 捕获[this]捕获类实例指针才可以调用私有成员方法参数必须使用引用避免请求对象拷贝。3.2 调用时序重点面试高频ChatServer 构造函数创建httplib::Server实例。调用ChatServer::start()判断服务运行状态。执行setHttpRoutes()绑定全部路由。执行set_mount_point()挂载静态资源目录。创建子线程子线程内部执行_chatServer-listen()开启端口监听。listen 之后服务器接收客户端 http 请求根据已经注册的路由分发到对应回调函数。3.3 线程模型说明httplib 的listen()是阻塞接口如果直接在主线程调用会阻塞整个程序。将 listen 放置子线程使用 detach 分离实现后台 http 服务主线程可以继续执行其他业务逻辑。使用std::atomicbool原子变量保存_isRunning状态保证多线程环境下状态读取写入线程安全。3.4 REST API 设计对应关系汇总表请求方法URI 路径处理回调函数功能说明POST/api/sessionhandleCreateSessionRequest创建会话GET/api/sessionshandleGetSessionListsRequest获取会话列表GET/api/modelshandleGetModelListsRequest获取模型列表DELETE/api/session/{session_id}handleDeleteSessionRequest删除指定会话GET/api/session/{session_id}/historyhandleGetHistoryMessagesRequest获取会话历史消息POST/api/messagehandleSendMessageRequest发送消息全量一次性返回POST/api/message/asynchandleSendMessageStreamRequest发送消息流式增量返回4 ~ 易错点总结在 listen () 监听之后才调用 setHttpRoutes ()路由不会生效。lambda 参数不写引用造成 Request/Response 对象拷贝响应失效。忘记捕获[this]lambda 无法访问类成员函数。静态资源目录写错浏览器访问无法加载 index.html 页面。不使用 atomic保存运行状态多线程下发生数据竞争。结尾uu们本文的内容到这里就全部结束了艾莉丝在这里再次感谢您的阅读艾莉丝努力练剑C/C Linux 底层探索者 | 一个正在努力练剑的技术博主【关注】跟随我一起深耕技术领域见证每一次成长。❤️【点赞】让优质内容被更多人看见让知识传递更有力量。⭐【收藏】把核心知识点存好在需要时随时查、随时用。【评论】分享你的经验或疑问评论区一起交流避坑不要忘记给博主“一键四连”哦“今日练剑达成”“技术之路难免有困惑但同行的人会让前进更有方向。”结语希望对学习Linux相关内容的uu有所帮助不要忘记给博主“一键四连”哦往期回顾【AI大模型接入SDK】ChatServer接口实现博主在这里放了一只小狗大家看完了摸摸小狗放松一下吧૮₍ ˶ ˊ ᴥ ˋ˶₎ა

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑