做衣服招临工在什么网站找,wordpress页面加载很慢,嘉祥县建设局官方网站,佛山网站策划公司目录
引入cpp-httplib库
将编译与运行服务打包
代码
客户端用户路由功能
采用MVC结构进行设计
用户路由功能
路由功能代码 引入cpp-httplib库
对于后端编译与运行模块基本已经设计完成#xff0c;最后用户是通过网络传递代码等信息#xff1b;我们就要将这个模块引入…目录
引入cpp-httplib库
将编译与运行服务打包
代码
客户端用户路由功能
采用MVC结构进行设计
用户路由功能
路由功能代码 引入cpp-httplib库
对于后端编译与运行模块基本已经设计完成最后用户是通过网络传递代码等信息我们就要将这个模块引入网络服务对于套接字的编写过程非常麻烦我们可以使用现成HTTP协议库。
cpp-httplib 是一个轻量级的、高效的C HTTP/HTTPS 客户端和服务器库。它由 Hideaki Soneyhirose开发并在 MIT 许可下发布。该项目的主要目标是提供一种简单易用的方式在 C 应用程序中实现 HTTP 和 HTTPS 功能。
任何版本都可以从网上下载得到这个库是一个单头文件库可以直接将这个库头文件下载转移到我们的项目公共模块中使用时添加库头文件和打开命名空间即可。对于使用这个现成的HTTP库时我们的gcc编译器一定要高版本的至少要7版本以上否则使用低版本的编译器时对于这个库可以会在编译或者运行时报错因此我们需要对gcc编译器进行升级。这里大家从网上自行搜索升级这里不过多哔哔。
将编译与运行服务打包
通过HTTP协议服务端收到请求请求中的请求参数包含代码、输入、时间和空间限制信息直接提取请求中的响应数据交给编译和运行模块即可处理完代码后将运行信息作为响应正文交给客户端即可。
代码
#include compile_run.hpp
#include jsoncpp/json/json.h
#include ../comm/httplib.h
using namespace ns_compiler_and_run;
using namespace httplib;
// 编译服务随时可能被多个人请求必须保证传递上来的代码形成源文件名称的时候要具有唯一性要不然多个用户之间会影响//
void Usage(std::string proc)
{std::cerr Usage : \n\t proc std::endl;
}
int main(int argc, char *argv[2])
{if (argc ! 2){Usage(argv[0]);return 1;}// 对外提供一个服务Server svr;svr.Post(/compile_and_run, [](const Request req, Response resp){//用户请求的正文就是我们想要的 json stringstd::string in_json req.body;std::string out_json;if(!in_json.empty()){//不为空调用编译和运行服务CompilerAndRun::Start(in_json,out_json);resp.set_content(out_json,application/json;charsetutf-8);} });svr.listen(0.0.0.0, atoi(argv[1])); // //httpreturn 0;
}
客户端用户路由功能
编译与运行后端功能模块编写完成后就要对前端模块进行设计对于前端的设计简单来说就是建立一个小型网站用户进入网站就是获取题目列表、编辑代码、提交判题这三个主要的模块。
采用MVC结构进行设计 M: Model,通常是和数据交互的模块比如对题库进行增删改查文件版MySQL V: view, 通常是拿到数据之后要进行构建网页渲染网页内容展示给用户的(浏览器) C: control, 控制器就是我们的核心业务逻辑 用户路由功能
根据用户的需求提供不同的服务但是也就是只有三个功能 获取题目列表用户要根据题目编号获取题目内容提交代码使用我们的判题功能1每道题的测试用例2.compile_and_run功能 路由功能代码
#includeiostream
#include../comm/httplib.h
using namespace httplib;
int main()
{//用户请求的路由功能//根据用户的需求提供不同的服务//获取题目列表//用户要根据题目编号获取题目内容//提交代码使用我们的判题功能1每道题的测试用例2.compile_and_run功能Server svr;svr.Get(/all_question,[](const Request req,Response resp){resp.set_content(这是所有的题目列表,text/plain;charsetutf-8);});//svr.Get(R(/questions/(\d)),[](const Request req,Response resp){//题目编号std::string number req.matches[1];resp.set_content(这是指定的一道题: number , text/plain;charsetutf-8);});//正则表达式//保证保持原始字符串svr.Get(R(/judge/(\d)),[](const Request req,Response resp){std::string number req.matches[1];resp.set_content(指定题目的判题: number,text/plain;charsetutf-8);});svr.listen(0.0.0.0,8080);return 0;
} 正则表达式regex 正则表达式是一种用于匹配字符串中字符组合的模式。它们提供了一种灵活的方式来搜索、匹配和操作文本。在这个代码中正则表达式被用于匹配请求的URL路径中特定的模式。 R前缀 在C中R前缀用于创建原始字符串字面量。原始字符串字面量将反斜杠\视为字面字符而不是转义字符。这在处理正则表达式或任何其他字符串时非常有用你不想解释转义序列时可以使用它。
解释
在第二和第三个路由定义中正则表达式被用在原始字符串字面量前缀为R中用于定义动态路由匹配包含数字模式的URL。在第二个路由/questions/(\d)中模式是寻找包含/questions/后跟一个或多个数字的URL。括号(\d)捕获数字作为一个组以备后用。在第三个路由/judge/(\d)中模式类似但匹配包含/judge/后跟一个或多个数字的URL。在与每个路由关联的lambda函数内部从URL中捕获的数字使用req.matches[1]进行检索其中req.matches保存了正则表达式捕获的匹配组。然后使用这些数字来提供特定路由的响应。 今天对项目网络库引入和用户路由功能的分享到这就结束了希望大家读完后有很大的收获也可以在评论区点评文章中的内容和分享自己的看法个人主页还有很多精彩的内容。您三连的支持就是我前进的动力感谢大家的支持!