阅读导航
- 一、模块概述
- 二、编写http_server 模块
- ✅cpp-httplib库的安装
- 1. 详细代码
- 2. 编写思路
- 三、项目前端代码
- ✅index.html
- ⭕应用效果
一、模块概述
这个模块是一个基于C++的简单搜索引擎服务程序,我们整合了HTTP服务器和搜索功能。我们首先初始化一个搜索器对象,使用预先处理好的文档数据(来自第一个模块)来建立索引。然后,我们设置了一个HTTP服务器,并为服务器定义了一个GET请求的处理函数,该函数响应客户端对"/s"路径的访问。
当客户端发送包含搜索关键字的请求时,服务器会验证请求中是否包含关键字参数。如果没有关键字,服务器会返回错误信息。如果有关键字,服务器将调用搜索器的搜索方法,传入关键字,并获取搜索结果,这些结果被封装为JSON字符串返回给客户端。
二、编写http_server 模块
✅cpp-httplib库的安装
我们要先在Linux机器上安装cpp-httplib库相关介绍文章链接:🔴C++ HTTP 库 cpp-httplib 使用
🚨注意:cpp-httplib库在使用的时候需要使用较新版本的gcc
1. 详细代码
// 引入所需的头文件 #include "httplib.hpp" #include "searcher.hpp" // 定义输入文件的路径和Web服务器的根目录 const std::string input = "data/raw_html/raw.txt"; const std::string root_path = "./wwwroot"; // 主函数,程序的入口点 int main() { // 创建Searcher类的实例并初始化 ns_searcher::Searcher search; search.InitSearcher(input); // 创建httplib::Server类的实例,用于处理HTTP请求 httplib::Server svr; // 设置服务器的根目录为root_path svr.set_base_dir(root_path.c_str()); // 为服务器添加一个GET请求的处理函数 svr.Get("/s", [&search](const httplib::Request &req, httplib::Response &rsp) { // 检查请求中是否包含搜索关键字参数"word" if (!req.has_param("word")) { // 如果没有搜索关键字,返回错误信息 rsp.set_content("必须要有搜索关键字!", "text/plain; charset=utf-8"); return; } // 从请求中获取搜索关键字 std::string word = req.get_param_value("word"); // 记录日志,输出用户搜索的关键字 LOG(NORMAL, "用户搜索的: " + word); // 定义用于存储搜索结果的字符串 std::string json_string; // 调用search实例的Search方法进行搜索,并将结果存储在json_string中 search.Search(word, &json_string); // 设置响应内容为搜索结果,并指定内容类型为JSON rsp.set_content(json_string, "application/json"); }); // 记录日志,表示服务器启动成功 LOG(NORMAL, "服务器启动成功..."); // 服务器开始监听所有IP的8081端口 svr.listen("0.0.0.0", 8081); // 返回0,表示程序正常结束 return 0; }
2. 编写思路
-
配置文件路径和服务器根目录:
- 定义了两个常量,input用于指定搜索引擎的数据输入文件路径,root_path用于指定Web服务器的根目录。
-
初始化搜索组件:
- 在main函数中,创建了一个ns_searcher::Searcher类的实例,并调用其InitSearcher方法来初始化搜索索引。这通常涉及加载数据文件和构建搜索所需的数据结构。
-
设置HTTP服务器:
- 使用httplib::Server创建一个HTTP服务器实例。
- 通过set_base_dir方法设置服务器的根目录,这样服务器就可以提供静态文件服务。
- 为服务器添加一个GET请求的处理函数,这个函数对应于URL路径/s。
-
处理搜索请求:
- 在GET请求处理函数中,首先检查请求是否包含名为word的查询参数,这是用户输入的搜索关键字。
- 如果没有搜索关键字,服务器返回一个错误信息。
- 如果有搜索关键字,服务器记录日志并提取关键字。
- 调用Searcher实例的Search方法,传入关键字,并获取搜索结果。
- 将搜索结果存储在一个JSON格式的字符串中,准备发送给客户端。
-
发送搜索结果:
- 设置HTTP响应的内容和类型为JSON格式,然后将搜索结果字符串发送给客户端。
-
启动服务器:
- 记录日志表示服务器已成功启动。
- 调用listen方法使服务器开始监听指定端口(8081)上的所有IP地址,准备接收客户端的请求。
整体来说,http_server展示了如何使用C++和现代库来创建一个简单的Web搜索引擎。它处理HTTP请求,执行搜索查询,并将结果以JSON格式返回给用户。这种设计模式适用于创建轻量级的搜索引擎或其他Web服务应用程序。
三、项目前端代码
✅index.html
boost 搜索引擎 ⭕应用效果
-