精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Qt通過QtWebApp開發(fā)HTTP服務(wù)器

jf_NsPBt3VS ? 來源:風(fēng)火輪技術(shù)團(tuán)隊(duì) ? 2023-06-25 10:17 ? 次閱讀

RTools工具是之前開源的一個(gè)工具,其目的是將平時(shí)要用到的工具集成在一起,方便使用;也有一段時(shí)間沒有更新新功能了。本次聯(lián)合風(fēng)火輪科技,UI重構(gòu)了一遍。更加方面快捷,后續(xù)將不斷新增加功能。

4e071386-126e-11ee-962d-dac502259ad0.png

在實(shí)際項(xiàng)目開發(fā)中HTTP是我們經(jīng)常使用的,嵌入式設(shè)備往往作為客戶端,而服務(wù)器一般都是部署在云端等設(shè)備上,這對(duì)于調(diào)試過程其實(shí)是很不方便的,其實(shí)網(wǎng)上也有更多工具可以在自己的PC上一鍵部署為HTTP服務(wù)器。例如:MyWebServer工具。

4e157386-126e-11ee-962d-dac502259ad0.png

雖然有像MyWebServer工具這么方便的工具,但是對(duì)于博主來說,還是不太便捷的,又要打開一個(gè)工具,所以想著將MyWebServer工具的功能集成到RTools中。

通過搜索一遍,Qt有一個(gè)比較好的Http服務(wù)器庫--QtWebApp。

什么是QtWebApp

QtWepApp是一個(gè)C++中的HTTP服務(wù)器庫,其靈感來自Java Servlet。

QtWebApp包含以下組件:

HTTP 1.1服務(wù)器(HTTP 1.1 Server)

模板引擎(Template Engine)

文件記錄器(File Logger)

Windows服務(wù)安裝程序(Windows Service Installer)

演示應(yīng)用程序(Demo Applications)

HTTP服務(wù)器在并發(fā)線程中處理傳入請(qǐng)求。它支持持久連接、HTTPS、會(huì)話cookie和文件上傳。

其中包括一個(gè)簡(jiǎn)單的支持多種語言的模板引擎,它用運(yùn)行時(shí)值填充文本文件中的占位符。模板引擎還支持條件輸出和循環(huán)。其他更大的模板引擎,如ClearSilver,也可以用作替代方案。

記錄器插入Qt,并將日志消息從qDebug(…)重定向到qFatal(…)到文件,同時(shí)還添加了時(shí)間戳、線程ID、會(huì)話ID等附加屬性。對(duì)記錄器配置文件的更改將自動(dòng)變?yōu)榛顒?dòng)狀態(tài),而無需重新啟動(dòng)程序。

QtService組件使您能夠?qū)?yīng)用程序設(shè)置為Windows服務(wù)。

大約2MB的小內(nèi)存需求使web服務(wù)器有資格用于嵌入式系統(tǒng)。但對(duì)于更大的網(wǎng)絡(luò)服務(wù)來說,它也足夠強(qiáng)大。

有關(guān)如何使用庫的教程,請(qǐng)參閱: http://stefanfrings.de/qtwebapp/tutorial/index.html

QtWebApp工程

QtWebApp工程包含了庫代碼和實(shí)例代碼,QtWebApp庫下載鏈接: http://stefanfrings.de/qtwebapp/QtWebApp.zip,解壓之后的工程目錄如下圖:

4e6ce936-126e-11ee-962d-dac502259ad0.png

RTools增加WebServer

移植流程

將QtWebApp的庫移植到我們的工程中,庫的路徑:xxxQtWebAppQtWebApphttpserver,將目錄下的所有文件拷貝到我們工程目中,添加的方式有兩種:①使用工程加入子工程的方式,②將QtWebApp的庫文件手動(dòng)添加到工程中,我們(風(fēng)火輪科技:https://www.youyeetoo.com/)選擇第②種方式,為了歸類代碼模塊。

4e912cba-126e-11ee-962d-dac502259ad0.png

在RTools工程中添加一個(gè)httpServer的資源文件:httpServer.ini。配置文件參數(shù)說明:

4ec61920-126e-11ee-962d-dac502259ad0.png

host和post:代表web服務(wù)器的IP地址和端口。公用Web服務(wù)器使用端口80,而內(nèi)部Web服務(wù)器通常在端口8080上偵聽。

minThreads:代表始終保持運(yùn)行的線程數(shù)量,用來確保一段時(shí)間不活動(dòng)后的良好響應(yīng)時(shí)間。

maxThreads:QtWebApp可以同時(shí)處理多個(gè)http請(qǐng)求,該參數(shù)指定并發(fā)工作線程的最大數(shù)量。其值要根據(jù)機(jī)器性能而定(可以利用負(fù)載生成器等工具來確定)。

cleanupInterval:Web服務(wù)器始終以空線程池開頭,當(dāng)HTTP請(qǐng)求進(jìn)入時(shí),將根據(jù)需要?jiǎng)?chuàng)建線程。空閑線程由計(jì)時(shí)器緩慢關(guān)閉。每隔一個(gè)cleanupInterval時(shí)間間隔(以毫秒為單位),服務(wù)器都將關(guān)閉一個(gè)空閑線程。

readTimeout:設(shè)置通過打開大量連接而不使用它們,來保護(hù)服務(wù)器免受簡(jiǎn)單的拒絕服務(wù)攻擊。靜默連接將在設(shè)定的毫秒數(shù)后被關(guān)閉。通常情況下,是由Web瀏覽器來關(guān)閉連接。

maxRequestSize:保護(hù)服務(wù)器免受非常多的HTTP請(qǐng)求而導(dǎo)致內(nèi)存過載的影響。此值適用于常規(guī)請(qǐng)求。

maxMultiPartSize:適用于網(wǎng)絡(luò)瀏覽器將文件上傳到服務(wù)器時(shí)發(fā)生的大部分請(qǐng)求。如果要接受10 MB的文件,由于HTTP協(xié)議開銷,必須將此值設(shè)置得更大一些。

開發(fā)WebServer功能

創(chuàng)建一個(gè)類:HttpServer,繼承HttpRequestHandler,該類重寫了service方法,我們(風(fēng)火輪科技:https://www.youyeetoo.com/)開發(fā)該工具的目的是支持客戶端可以通過wget獲取文件。類的內(nèi)容如下:

httpserver.cpp內(nèi)容:構(gòu)造函數(shù)設(shè)置指定服務(wù)目錄;service方法實(shí)現(xiàn)將文件內(nèi)容傳輸給客戶端,如果文件不存在則返回404錯(cuò)誤.

#include"httpserver.h"
#include"QDir"

HttpServer::HttpServer(QObject*parent)
:HttpRequestHandler(parent)
{
Q_UNUSED(parent)
}

HttpServer::HttpServer(QStringpath)
{
basePath=path;
}

voidHttpServer::service(HttpRequest&request,HttpResponse&response)
{

QFilefile(basePath+request.getPath());
if(file.open(QFile::ReadOnly))
{
response.setHeader("Content-Type","application/octet-stream");
while(!file.atEnd()&&!file.error())
{
QByteArraybuffer=file.readAll();
response.write(buffer);
}
}
else
{
response.setStatus(404,"Filenotfound");
}
}

httpserver.h內(nèi)容:

#ifndefHTTPSERVER_H
#defineHTTPSERVER_H

#include"httprequesthandler.h"

usingnamespacestefanfrings;
classHttpServer:publicHttpRequestHandler
{
Q_OBJECT
public:
HttpServer(QObject*parent=nullptr);
HttpServer(QStringpath);

voidservice(HttpRequest&request,HttpResponse&response);
private:
QStringbasePath;
};

#endif//HTTPSERVER_H

創(chuàng)建一個(gè)類、帶UI的:webservertool。

在構(gòu)造函數(shù)中,獲取ini文件listener組的配置。

WebServerTool::WebServerTool(QWidget*parent):
QMainWindow(parent),
ui(newUi::WebServerTool)
{
ui->setupUi(this);

listenerSettings=newQSettings(":/HttpServer/httpServer.ini",QSettings::IniFormat,nullptr);
listenerSettings->beginGroup("listener");
}

啟動(dòng)WebServer,①獲取http服務(wù)目錄,②根據(jù)用戶設(shè)置host(服務(wù)器IP)和port(服務(wù)器端口號(hào))更新監(jiān)聽配置,然后創(chuàng)建http監(jiān)聽

voidWebServerTool::httpStartListener()
{
if(httpListener!=nullptr)
{
httpListener->close();
deletehttpListener;
httpListener=nullptr;
}

if(ui->lineEditHttpPath->text().isEmpty())
{
ui->textBrowserHttpLog->append("請(qǐng)選擇http服務(wù)目錄");
return;
}
listenerSettings->setValue("host",ui->comboBoxHttpIp->currentText());
listenerSettings->setValue("port",ui->lineEditHttpPort->text());
httpServer=newHttpServer(ui->lineEditHttpPath->text());
httpListener=newHttpListener(listenerSettings,httpServer,nullptr);
if(httpListener==nullptr)
{
ui->textBrowserHttpLog->append("Http啟動(dòng)監(jiān)聽失敗");
}
else
{
ui->textBrowserHttpLog->append("Http啟動(dòng)監(jiān)聽成功");
}
ui->buttonHttpStart->setText("停止(Stop)");
.......
}

關(guān)閉WebServer,①關(guān)閉http監(jiān)聽,②刪除http監(jiān)聽對(duì)象

voidWebServerTool::httpStopListener()
{
if(httpListener!=nullptr)
{
httpListener->close();
deletehttpListener;
httpListener=nullptr;
}

ui->buttonHttpStart->setText("啟動(dòng)(Start)");
....
}

驗(yàn)證WebServer功能

電腦的某個(gè)目錄創(chuàng)建一個(gè)文件:RToolTest.txt(任意命名),并在文件中添加一些內(nèi)容:

4eff97c2-126e-11ee-962d-dac502259ad0.png

打開RTools,選擇WebServer工具,選擇服務(wù)目錄為存放文件RToolTest.txt的目錄。選擇電腦的IP,和設(shè)置端口號(hào),并點(diǎn)擊啟動(dòng)。

4f2ccaa8-126e-11ee-962d-dac502259ad0.png

驗(yàn)證:我在虛擬機(jī)中的ubuntu中,采用wget進(jìn)行獲取文件內(nèi)容:執(zhí)行命令如下:

wgethttp://IP:PORT/RToolTest.txt

當(dāng)服務(wù)目錄下存在我們請(qǐng)求的文件,執(zhí)行結(jié)果:

4f717f54-126e-11ee-962d-dac502259ad0.png

當(dāng)服務(wù)目錄下不存在我們請(qǐng)求的文件,執(zhí)行結(jié)果:

4fa394bc-126e-11ee-962d-dac502259ad0.png

總結(jié)

本次聯(lián)合風(fēng)火輪科技開發(fā)新版本的RTools中集成了Jlink tool和web server tool,后續(xù)將不斷新增加功能

web server tool目前只支持http,不支持https功能,博主將在后面開發(fā)完畢。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9029

    瀏覽量

    85207
  • HTTP
    +關(guān)注

    關(guān)注

    0

    文章

    501

    瀏覽量

    31076
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3256

    瀏覽量

    42420
  • Qt
    Qt
    +關(guān)注

    關(guān)注

    1

    文章

    301

    瀏覽量

    37837

原文標(biāo)題:Qt通過QtWebApp開發(fā)HTTP服務(wù)器

文章出處:【微信號(hào):風(fēng)火輪技術(shù)團(tuán)隊(duì),微信公眾號(hào):風(fēng)火輪技術(shù)團(tuán)隊(duì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于HTTP網(wǎng)頁服務(wù)器和UDP上位機(jī)的MJPG碼流傳輸

    本文采用的硬件板卡為飛凌嵌入式OKMX8MP-C開發(fā)板,系統(tǒng)版本Linux5.4.70+Qt5.15.0,主要介紹基于HTTP網(wǎng)頁服務(wù)器和UDP上位機(jī)的MJPG碼流傳輸。
    發(fā)表于 06-09 11:27 ?1743次閱讀

    Qt通過QtWebApp開發(fā)HTTP服務(wù)器

    。 在實(shí)際項(xiàng)目開發(fā)HTTP是我們經(jīng)常使用的,嵌入式設(shè)備往往作為客戶端,而服務(wù)器一般都是部署在云端等設(shè)備上,這對(duì)于調(diào)試過程其實(shí)是很不方便的,其實(shí)網(wǎng)上也有更多工具可以在自己的PC上一鍵部署為HT
    的頭像 發(fā)表于 06-26 08:38 ?7814次閱讀
    <b class='flag-5'>Qt</b><b class='flag-5'>通過</b><b class='flag-5'>QtWebApp</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>HTTP</b><b class='flag-5'>服務(wù)器</b>

    Linux開發(fā)_CentOS7.4服務(wù)器搭建NFS、NGINX服務(wù)器,安裝ffmpeg、Qt環(huán)境

    在CentOS7.4服務(wù)器版本的環(huán)境下搭建NFS服務(wù)器、安裝ffmpeg、安裝nginx服務(wù)器、部署Qt編譯環(huán)境。
    的頭像 發(fā)表于 07-14 13:45 ?1543次閱讀
    Linux<b class='flag-5'>開發(fā)</b>_CentOS7.4<b class='flag-5'>服務(wù)器</b>搭建NFS、NGINX<b class='flag-5'>服務(wù)器</b>,安裝ffmpeg、<b class='flag-5'>Qt</b>環(huán)境

    labview如何通過http協(xié)議上傳數(shù)據(jù)至web服務(wù)器

    本人小白,對(duì)網(wǎng)絡(luò)和通訊都是菜鳥。最近在學(xué)習(xí)labview如何通過http協(xié)議上傳數(shù)據(jù)至web服務(wù)器,這個(gè)web服務(wù)器是一般構(gòu)建的服務(wù)器,不是
    發(fā)表于 10-30 17:28

    labview如何通過http協(xié)議post方法上傳數(shù)據(jù)至web服務(wù)器

    各位前輩好: 本人小白,對(duì)網(wǎng)絡(luò)和通訊都是菜鳥。 最近有個(gè)小程序,要用labview通過http協(xié)議post方法上傳數(shù)據(jù)至web服務(wù)器(請(qǐng)求和響應(yīng)的格式見圖片),這個(gè)web服務(wù)器是用C語
    發(fā)表于 06-12 09:44

    OPC服務(wù)器開發(fā)淺談 — 服務(wù)器模型

    這里主要討論的是OPC Data Access 2.0服務(wù)器開發(fā),在掌握了這個(gè)最常用的OPC服務(wù)器開發(fā)之后,對(duì)其它類型的OPC服務(wù)器,如A
    發(fā)表于 07-02 08:29

    HTTP OTA webclient獲取不到服務(wù)器如何處理?

    嘗試用HTTP_OTA的方式來升級(jí)程序,按照網(wǎng)上的資料搭建程序,在http_ota.c中現(xiàn)在遇到Webclient獲取不到服務(wù)器的情況:找不到服務(wù)器
    發(fā)表于 05-19 10:43

    如何辨別Web服務(wù)器,應(yīng)用程序服務(wù)器,HTTP服務(wù)器

    Apache是純粹的web服務(wù)器,而Tomcat和IIS因?yàn)榫哂辛私忉寛?zhí)行服務(wù)器端代碼的能力,可以稱作為輕量級(jí)應(yīng)用服務(wù)器或帶有服務(wù)器功能的Web服務(wù)
    發(fā)表于 11-10 14:28 ?1057次閱讀

    如何正確的理解使用WEB服務(wù)器和應(yīng)用程序服務(wù)器HTTP服務(wù)器

    WEB服務(wù)器、應(yīng)用程序服務(wù)器HTTP服務(wù)器有何區(qū)別?IIS、Apache、Tomcat、Weblogic、WebSphere都各屬于哪種服務(wù)器
    發(fā)表于 05-27 08:00 ?0次下載
    如何正確的理解使用WEB<b class='flag-5'>服務(wù)器</b>和應(yīng)用程序<b class='flag-5'>服務(wù)器</b>及<b class='flag-5'>HTTP</b><b class='flag-5'>服務(wù)器</b>

    Java編程:發(fā)送HTTP請(qǐng)求到服務(wù)器

    當(dāng)Java程序需要向服務(wù)器發(fā)送請(qǐng)求或讀取服務(wù)器數(shù)據(jù)時(shí),使用URLConnection類是比較好的選擇。URLConnection類封裝了與服務(wù)器互動(dòng)操作的方法,通過它可以建立與
    的頭像 發(fā)表于 07-01 09:59 ?3060次閱讀
    Java編程:發(fā)送<b class='flag-5'>HTTP</b>請(qǐng)求到<b class='flag-5'>服務(wù)器</b>

    基于HTTP網(wǎng)頁服務(wù)器和UDP上位機(jī)的MJPG碼流傳輸

    本文采用的硬件板卡為飛凌嵌入式OKMX8MP-C開發(fā)板,系統(tǒng)版本Linux5.4.70+Qt5.15.0,主要介紹基于HTTP網(wǎng)頁服務(wù)器和UDP上位機(jī)的MJPG碼流傳輸。
    發(fā)表于 01-23 12:05 ?762次閱讀

    基于LwIP的HTTP服務(wù)器設(shè)計(jì)

    前面我們實(shí)現(xiàn)了TCP服務(wù)器和客戶端的簡(jiǎn)單應(yīng)用,接下來我們實(shí)現(xiàn)一個(gè)基于TCP協(xié)議的應(yīng)用協(xié)議,那就是HTTP超文本傳輸協(xié)議。
    的頭像 發(fā)表于 12-14 15:15 ?1656次閱讀
    基于LwIP的<b class='flag-5'>HTTP</b><b class='flag-5'>服務(wù)器</b>設(shè)計(jì)

    HTTP服務(wù)器項(xiàng)目實(shí)現(xiàn)介紹

    項(xiàng)目介紹 本項(xiàng)目實(shí)現(xiàn)的是一個(gè)HTTP服務(wù)器,項(xiàng)目中將會(huì)通過基本的網(wǎng)絡(luò)套接字讀取客戶端發(fā)來的HTTP請(qǐng)求并進(jìn)行分析,最終構(gòu)建HTTP響應(yīng)并返回
    的頭像 發(fā)表于 11-08 16:54 ?907次閱讀
    <b class='flag-5'>HTTP</b><b class='flag-5'>服務(wù)器</b>項(xiàng)目實(shí)現(xiàn)介紹

    如何利用AWFlow搭建HTTP服務(wù)器

    本文將基于EsDA開發(fā)套件快速在開發(fā)板上搭建HTTP服務(wù)器,為HTTP客戶端提供了訪問板子的外設(shè)資源,數(shù)據(jù)以及文件讀寫等接口,實(shí)現(xiàn)設(shè)備與網(wǎng)絡(luò)
    的頭像 發(fā)表于 12-14 08:24 ?557次閱讀
    如何利用AWFlow搭建<b class='flag-5'>HTTP</b><b class='flag-5'>服務(wù)器</b>

    使用NS1串口服務(wù)器HTTP模式上傳服務(wù)器數(shù)據(jù)

    HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)之上。瀏覽作為HTTP客戶端通過URL向HTTP
    的頭像 發(fā)表于 08-30 12:36 ?276次閱讀
    使用NS1串口<b class='flag-5'>服務(wù)器</b><b class='flag-5'>HTTP</b>模式上傳<b class='flag-5'>服務(wù)器</b>數(shù)據(jù)