当前位置: 首页 > wzjs >正文

平面设计素材网站知乎营销方案100例

平面设计素材网站知乎,营销方案100例,网站程序如何上传,长沙网站建站推广JQHttpServer是基于Qt开发的轻量级HTTP/HTTPS服务器。 GitHub地址:GitHub - 188080501/JQHttpServer: 基于Qt开发的轻量级HTTP/HTTPS服务器 不愧是大神写的,用起来确实方便。 下面粗略介绍 jqhttpserver.h 的内容先看源代码: /*This fil…

JQHttpServer是基于Qt开发的轻量级HTTP/HTTPS服务器。

GitHub地址:GitHub - 188080501/JQHttpServer: 基于Qt开发的轻量级HTTP/HTTPS服务器
不愧是大神写的,用起来确实方便。

下面粗略介绍 jqhttpserver.h 的内容先看源代码:
 

/*This file is part of JQLibraryCopyright: JasonContact email: 188080501@qq.comGNU Lesser General Public License UsageAlternatively, this file may be used under the terms of the GNU LesserGeneral Public License version 2.1 or version 3 as published by the FreeSoftware Foundation and appearing in the file LICENSE.LGPLv21 andLICENSE.LGPLv3 included in the packaging of this file. Please review thefollowing information to ensure the GNU Lesser General Public Licenserequirements will be met: https://www.gnu.org/licenses/lgpl.html andhttp://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
*/#ifndef JQLIBRARY_INCLUDE_JQHTTPSERVER_H_
#define JQLIBRARY_INCLUDE_JQHTTPSERVER_H_#ifndef QT_NETWORK_LIB
#   error("Please add network in pro file")
#endif#ifndef QT_CONCURRENT_LIB
#   error("Please add concurrent in pro file")
#endif// C++ lib import
#include <functional>// Qt lib import
#include <QVector>
#include <QFuture>
#include <QMutex>
#include <QUrl>
#ifndef QT_NO_SSL
#   include <QSslCertificate>
#   include <QSslSocket>
#endif#include "jqdeclare.hpp"class QIODevice;
class QThreadPool;
class QHostAddress;
class QTimer;
class QImage;
class QTcpServer;
class QLocalServer;
class QSslKey;
class QSslConfiguration;namespace JQHttpServer
{class Session: public QObject
{Q_OBJECTQ_DISABLE_COPY( Session )public:Session( const QPointer<QIODevice> &socket );~Session();void setHandleAcceptedCallback(const std::function<void(const QPointer<Session> &)> &callback) { handleAcceptedCallback_ = callback; }QPointer<QIODevice> ioDevice() { return ioDevice_; }QString requestSourceIp() const;QString requestMethod() const;QString requestUrl() const;QString requestCrlf() const;QMap<QString, QString> requestHeader() const;QByteArray requestBody() const;QString requestUrlPath() const;QStringList requestUrlPathSplitToList() const;QMap<QString, QString> requestUrlQuery() const;int replyHttpCode() const;qint64 replyBodySize() const;#ifndef QT_NO_SSLQSslCertificate peerCertificate() const;
#endifvolatile int m_isSafeExit;public slots:void replyText(const QString &replyData, const int &httpStatusCode = 200);void replyRedirects(const QUrl &targetUrl, const int &httpStatusCode = 200);void replyJsonObject(const QJsonObject &jsonObject, const int &httpStatusCode = 200);void replyJsonArray(const QJsonArray &jsonArray, const int &httpStatusCode = 200);void replyFile(const QString &filePath, const int &httpStatusCode = 200);void replyFile(const QString &fileName, const QByteArray &fileData, const int &httpStatusCode = 200);void replyImage(const QImage &image, const QString &format = "PNG", const int &httpStatusCode = 200);void replyImage(const QString &imageFilePath, const int &httpStatusCode = 200);void replyBytes(const QByteArray &bytes, const QString &contentType = "application/octet-stream", const int &httpStatusCode = 200);void replyOptions();private:void inspectionBufferSetup1();void inspectionBufferSetup2();void onBytesWritten(const qint64 &written);void waitWorkingForFinished();private:static QAtomicInt remainSession_;QPointer<QIODevice>                                   ioDevice_;std::function<void( const QPointer<Session> & )>      handleAcceptedCallback_;QSharedPointer<QTimer>                                autoCloseTimer_;QByteArray receiveBuffer_;QString                  requestSourceIp_;QString                  requestMethod_;QString                  requestUrl_;QString                  requestCrlf_;QByteArray               requestBody_;QMap<QString, QString> requestHeader_;bool   headerAcceptedFinished_  = false;bool   contentAcceptedFinished_ = false;qint64 contentLength_           = -1;int        replyHttpCode_ = -1;QByteArray replyBuffer_;qint64     replyBodySize_ = -1;qint64                      waitWrittenByteCount_ = -1;QSharedPointer<QIODevice> replyIoDevice_;
};class AbstractManage: public QObject
{Q_OBJECTQ_DISABLE_COPY( AbstractManage )public:AbstractManage(const int &handleMaxThreadCount);virtual ~AbstractManage();void setMainObject(QObject *obj) { m_mainObj = obj; }QObject* getMainObject() { return m_mainObj; }void setHttpAcceptedCallback(const std::function<void(const QPointer<Session> &session,QObject *mainObj)> &httpAcceptedCallback){httpAcceptedCallback_ = httpAcceptedCallback;}QSharedPointer<QThreadPool> handleThreadPool() { return handleThreadPool_; }QSharedPointer<QThreadPool> serverThreadPool() { return serverThreadPool_; }virtual bool isRunning() = 0;protected Q_SLOTS:bool initialize();void deinitialize();protected:virtual bool onStart() = 0;virtual void onFinish() = 0;bool startServerThread();void stopHandleThread();void stopServerThread();void newSession(const QPointer<Session> &session);void handleAccepted(const QPointer<Session> &session);signals:void readyToClose();//void onRedReady(const QPointer<JQHttpServer::Session> &session);protected:QSharedPointer<QThreadPool> serverThreadPool_;QSharedPointer<QThreadPool> handleThreadPool_;QMutex mutex_;std::function<void(const QPointer<Session> &session,QObject *mainObj)> httpAcceptedCallback_;QSet<Session *> availableSessions_;QObject *m_mainObj;
};class TcpServerManage: public AbstractManage
{Q_OBJECTQ_DISABLE_COPY( TcpServerManage )public:TcpServerManage(const int &handleMaxThreadCount = 2);~TcpServerManage();bool listen( const QHostAddress &address, const quint16 &port );quint16 getListenPort() { return listenPort_; }private:bool isRunning();bool onStart();void onFinish();private:QPointer<QTcpServer> tcpServer_;QHostAddress listenAddress_ = QHostAddress::Any;quint16 listenPort_ = 0;
};#ifndef QT_NO_SSL
class SslServerHelper;class SslServerManage: public AbstractManage
{Q_OBJECTQ_DISABLE_COPY( SslServerManage )public:SslServerManage(const int &handleMaxThreadCount = 2);~SslServerManage();bool listen( const QHostAddress &                                   address,const quint16 &                                        port,const QString &                                        crtFilePath,const QString &                                        keyFilePath,const QList<QPair<QString, QSsl::EncodingFormat>> &caFileList = {},    // [ { filePath, format } ]const QSslSocket::PeerVerifyMode &                     peerVerifyMode = QSslSocket::VerifyNone );quint16 getListenPort() { return listenPort_; }private:bool isRunning();bool onStart();void onFinish();private:QPointer<SslServerHelper> tcpServer_;QHostAddress listenAddress_ = QHostAddress::Any;quint16      listenPort_    = 0;QSharedPointer<QSslConfiguration> sslConfiguration_;
};enum ServiceConfigEnum
{ServiceUnknownConfig,ServiceHttpListenPort,ServiceHttpsListenPort,ServiceProcessor, // QPointer<QObject> or QList<QPointer<QObject>>ServiceUuid,ServiceSslCrtFilePath,ServiceSslKeyFilePath,ServiceSslCAFilePath,ServiceSslPeerVerifyMode,
};class Service: public QObject
{Q_OBJECTQ_DISABLE_COPY( Service )private:enum ReceiveDataType{UnknownReceiveDataType,NoReceiveDataType,VariantListReceiveDataType,VariantMapReceiveDataType,ListVariantMapReceiveDataType,};struct ApiConfig{QPointer<QObject> process;QString             apiMethod;QString             apiName;QString             slotName;ReceiveDataType     receiveDataType = UnknownReceiveDataType;};class Recoder{public:Recoder( const QPointer<JQHttpServer::Session> &session );~Recoder();QPointer<JQHttpServer::Session> session_;QDateTime                         acceptedTime_;QString                           serviceUuid_;QString                           apiName;};protected:Service() = default;public:~Service() = default;static QSharedPointer<Service> createService( const QMap<ServiceConfigEnum, QVariant> &config );void registerProcessor( const QPointer<QObject> &processor );virtual QJsonDocument extractPostJsonData( const QPointer<JQHttpServer::Session> &session );static void reply(const QPointer<JQHttpServer::Session> &session,const QJsonObject &data,const bool &isSucceed = true,const QString &message = { },const int &httpStatusCode = 200 );static void reply(const QPointer<JQHttpServer::Session> &session,const bool &isSucceed = true,const QString &message = { },const int &httpStatusCode = 200 );virtual void httpGetPing( const QPointer<JQHttpServer::Session> &session );virtual void httpGetFaviconIco( const QPointer<JQHttpServer::Session> &session );virtual void httpOptions( const QPointer<JQHttpServer::Session> &session );protected:bool initialize( const QMap<ServiceConfigEnum, QVariant> &config );private:void onSessionAccepted( const QPointer<JQHttpServer::Session> &session );static QString snakeCaseToCamelCase(const QString &source, const bool &firstCharUpper = false);static QList<QVariantMap> variantListToListVariantMap(const QVariantList &source);private:QSharedPointer<JQHttpServer::TcpServerManage> httpServerManage_;QSharedPointer<JQHttpServer::SslServerManage> httpsServerManage_;QString                                     serviceUuid_;QMap<QString, QMap<QString, ApiConfig>> schedules_;    // apiMethod -> apiName -> APIQMap<QString, std::function<void( const QPointer<JQHttpServer::Session> &session )>> schedules2_; // apiPathPrefix -> callbackQPointer<QObject> certificateVerifier_;
};
#endif}#endif//JQLIBRARY_INCLUDE_JQHTTPSERVER_H_

1. Session 类

作用:处理单个 HTTP 请求/响应会话的全生命周期

核心功能

  • 请求解析
    存储 HTTP 请求的元数据(如 requestMethod_requestUrl_requestHeader_ 等),提供接口获取请求的:

    • 客户端 IP (requestSourceIp())

    • 请求方法(GET/POST等)

    • URL 路径和查询参数

    • 请求头和请求体内容

  • 响应生成
    提供多种响应方式:

    • 文本/JSON/二进制数据回复(replyText()/replyJsonObject()/replyBytes()

    • 文件/图片传输(replyFile()/replyImage()

    • 重定向(replyRedirects()

    • 支持设置 HTTP 状态码和自定义 Content-Type

  • 底层通信
    通过 QIODevice(如 QTcpSocket)与客户端进行数据交互,管理数据的异步写入(onBytesWritten() 处理写入进度)

  • 安全控制
    支持 SSL 证书验证(peerCertificate()),提供自动关闭连接的定时器(autoCloseTimer_

典型使用场景
当服务器接受一个新连接时,会创建一个 Session 对象,该对象解析客户端请求并调用相应的回复方法发送响应数据。


2. AbstractManage 类

作用:服务器管理的抽象基类,提供线程池和会话管理的基础设施

核心功能

  • 线程池管理
    维护两个线程池:

    • handleThreadPool_:处理业务逻辑(如调用用户设置的 httpAcceptedCallback_

    • serverThreadPool_:处理网络监听和连接接受(通过 startServerThread()

  • 会话生命周期管理
    跟踪所有活跃的 Session 对象(availableSessions_),提供统一的初始化/反初始化接口(initialize()/deinitialize()

  • 回调机制
    通过 setHttpAcceptedCallback() 允许用户注册自定义请求处理逻辑,当新会话建立时,触发 handleAccepted() 分发到线程池

  • 抽象接口
    定义纯虚函数 onStart() 和 onFinish(),要求子类实现具体的服务器启动/停止逻辑

设计目的
为不同类型的服务器(如 TCP、SSL、Local Socket)提供统一的管理框架,复用线程管理和会话跟踪逻辑。


3. TcpServerManage 类

作用:基于 TCP 协议的 HTTP 服务器具体实现

核心功能

  • TCP 服务器监听
    通过 listen() 方法在指定地址和端口启动 QTcpServer,等待客户端连接

  • 连接处理
    当新连接到达时,创建 Session 对象并调用 newSession(),将其加入管理队列

  • 继承实现
    实现父类 AbstractManage 的纯虚函数:

    • onStart():启动 TCP 服务器

    • onFinish():关闭服务器并清理资源

关键成员

  • QTcpServer* tcpServer_:底层 TCP 服务器实例

  • listenAddress_ 和 listenPort_:监听的地址和端口

使用场景
需快速搭建一个基于 TCP 的 HTTP 服务器时,直接实例化此类并调用 listen() 方法即可。


协作流程示例

  1. 启动服务器
    TcpServerManage 调用 listen() → 触发 onStart() 启动 QTcpServer

  2. 接受连接
    当客户端连接到达 → TcpServerManage 创建 Session 对象,并调用 AbstractManage::newSession()

  3. 处理请求
    AbstractManage 将新会话通过 httpAcceptedCallback_ 回调传递给用户代码,使用 handleThreadPool_ 异步处理

  4. 发送响应
    用户在回调中通过 Session::replyXXX() 方法生成响应数据 → 数据通过 QIODevice 异步发送给客户端

  5. 资源回收
    会话结束时,Session 的 autoCloseTimer_ 或写入完成信号触发资源释放,AbstractManage 维护的 availableSessions_ 自动清理失效会话。

http://www.dtcms.com/wzjs/509316.html

相关文章:

  • 公共网站怎地做百度关键词竞价查询系统
  • 现在建设校园网站用什么软件百度搜索网
  • 建设银行乌鲁木齐招聘网站品牌推广的作用
  • 佛山专业做淘宝网站网络营销策划的具体流程是
  • 做卡通头像的网站沈阳网站建设
  • 企业网站建设 厦门semantic scholar
  • 只做日本的旅行网站百度搜索百度
  • 设计网站欣赏国家高新技术企业
  • 最新新闻热点事件2022年网站seo搜索引擎优化教程
  • html5导航网站源码下载比较好网站制作公司
  • 营销型网站核心要素有哪些微信广告
  • wordpress音乐播放主题seo网络推广培训班
  • ftp网站 免费零基础学seo要多久
  • 网站蜘蛛来访记录衡阳seo优化推荐
  • 池州网站制作公自助建站网站模板
  • 高端网站创建网络销售的方法和技巧
  • wordpress 如何更改主页品牌seo主要做什么
  • 广州市建设招标管理办公室网站外贸营销渠道
  • 濮阳市城乡一体化示范区开州街道免费网站分析seo报告是坑吗
  • flash网站建设技术...百度关键词屏蔽
  • 图书网站开发的实践意义太原seo公司
  • 推进政府网站集约化建设是重要关键词挖掘工具爱站网
  • 网站实时K线怎么做温州最好的seo
  • 上海有名的做网站的公司泉州百度网络推广
  • 哪家网站建设公司好友情链接查询友情链接检测
  • 网站没备案做淘宝客今日头条关键词工具
  • 宜宾网站建设多少钱百度账号客服
  • 上海的设计网站有哪些内容百度app客服人工电话
  • 沈阳的网站制作公司哪家好网络营销顾问工作内容
  • wordpress 免费四平网站seo