以前,我问过一个问题,关于在 C++ 程序中使用哪个库来 创建Web 界面,实际上是 C++ 中的http 服务器,HolyBlackCat,是根据cpp-httplib椭圆形的建议。 我真的很喜欢这个库,因为它只包含一个 *.h 文件,这将安装简化到了不可能的地步。和简单。
下面是一个最简单的启动服务器的例子
//
// hello.cc
//
// Copyright (c) 2019 Yuji Hirose. All rights reserved.
// MIT License
//
#include <httplib.h>
using namespace httplib;
int main(void) {
Server svr;
svr.Get("/hi", [](const Request & /*req*/, Response &res) { //Про запросу к адресу 192.168.0.102:8080/hi Вернуть текст как страницу
res.set_content("Hello World!", "text/plain"); //Текст для возврата и формат
});
svr.Get("/", [](const Request & /*req*/, Response &res) { //Про запросу к адресу 192.168.0.102:8080/ Вернуть текст как страницу
res.set_content("Main Pages!", "text/plain"); //Текст для возврата и формат
});
//Команда запускает цикл так что в реальных проектах в отдельный процесс её
svr.listen("192.168.0.102", 8080); // 192.168.0.102:8080 Ип куда розшарить, Ип вашого пк ну и порт какой то главное чтобы не был занят всякими торрентами иле open server
//Проверок не делаем , по этому если программа просто завершала роботу то нужно использовать правильный ип
//список можно получить командой в консоли ipconfig берем ип lan иле wlan
}
但是如何处理请求?,例如,在套接字中,我们指示将它们发送到何处的函数,并且在函数本身中,我们已经解析了 url,并且根据请求,我们形成页面并将其返回给用户,一切都很清楚,但没有解决了冻结问题,所以我开始寻找替代方案。在 httplib 中,我在任何示例中都没有看到任何熟悉的内容。
如何在httplib库中接收请求,对其 进行处理并用新数据向发送者返回响应?
通过处理的话,我的意思是在 php $_GET 中接收一个数组。查看客户端使用 get 请求从服务器请求什么,无论是变量还是文件的值,我们都会返回它。当然,我会自己编写处理程序,但是如何创建它并动态返回页面。如果 svr.Get 或类似物不采用文本,而是采用处理函数,这将更合乎逻辑。其中,当被请求时,它将向哪个客户端页面发送请求类型的 Get Post 请求和一个数组,键值。
我查看了代码内部,似乎没有使用多线程,所以对于计数器,我将使用一个简单的
int. 如果有的话,您可以随时将其转换为原子或用互斥体覆盖它(尽管在这里,一如既往,您需要小心)。首先,让我们创建一个全局计数器变量
(是的,全局变量不是很好,但对于我们的例子来说它会做的。在一般情况下会有某种单例或更好的)。并添加此处理程序
一切准备就绪。现在你可以在浏览器中访问http://127.0.0.1:8080/counter看到计数器,它在不断增加。好了,上半场结束了。
让我们继续下半场
我们将向用户展示他自己的get请求参数!
这里的一切都很简单明了——在循环中,我们遍历参数并将它们添加到行中,然后将其全部打印给用户。现在如果你写类似http://127.0.0.1:8080/show?data=test&q=1
然后用户会看到这个