1. 程式人生 > >muduo網路庫學習之muduo_http 庫涉及到的類

muduo網路庫學習之muduo_http 庫涉及到的類

#include <muduo/net/http/HttpServer.h>
#include <muduo/net/http/HttpRequest.h>
#include <muduo/net/http/HttpResponse.h>
#include <muduo/net/EventLoop.h>
#include <muduo/base/Logging.h>

#include <iostream>
#include <map>

using namespace muduo;
using namespace muduo::net;

extern char
 favicon[555];
bool benchmark = false;

// 實際的請求處理
void onRequest(const HttpRequest &req, HttpResponse *resp)
{
    std::cout << "Headers " << req.methodString() << " " << req.path() << std::endl;
    if (!benchmark)
    {
        const std::map<string, string> &headers = req.headers();
        for
 (std::map<string, string>::const_iterator it = headers.begin();
                it != headers.end();
                ++it)
        {
            std::cout << it->first << ": " << it->second << std::endl;
        }
    }

    if (req.path() == "/")
    {
        resp->setStatusCode(HttpResponse::k200Ok);
        resp->setStatusMessage("OK"
);
        resp->setContentType("text/html");
        resp->addHeader("Server""Muduo");
        string now = Timestamp::now().toFormattedString();
        resp->setBody("<html><head><title>This is title</title></head>"
                      "<body><h1>Hello</h1>Now is " + now +
                      "</body></html>");
    }
    else if (req.path() == "/favicon.ico")
    {
        resp->setStatusCode(HttpResponse::k200Ok);
        resp->setStatusMessage("OK");
        resp->setContentType("image/png");
        resp->setBody(string(favicon, sizeof favicon));
    }
    else if (req.path() == "/hello")
    {
        resp->setStatusCode(HttpResponse::k200Ok);
        resp->setStatusMessage("OK");
        resp->setContentType("text/plain");
        resp->addHeader("Server""Muduo");
        resp->setBody("hello, world!\n");
    }
    else
    {
        resp->setStatusCode(HttpResponse::k404NotFound);
        resp->setStatusMessage("Not Found");
        resp->setCloseConnection(true);
    }
}

int main(int argc, char *argv[])
{
    int numThreads = 0;
    if (argc > 1)
    {
        benchmark = true;
        Logger::setLogLevel(Logger::WARN);
        numThreads = atoi(argv[1]);
    }
    EventLoop loop;
    HttpServer server(&loop, InetAddress(8000), "dummy");
    server.setHttpCallback(onRequest);
    server.setThreadNum(numThreads);
    server.start();
    loop.loop();
}

// 這是一個圖片資料
char favicon[555] =
{
    .....
};

相關推薦

muduo網路學習muduo_http 涉及到的

#include <muduo/net/http/HttpServer.h>#include <muduo/net/http/HttpRequest.h>#include <muduo/net/http/HttpResponse.h>#include <muduo/n

C++Boost學習thread(一)

目錄 1.thread庫 ^   Boost.Thread允許在可移植C ++程式碼中使用多個執行執行緒和共享資料。它提供了用於管理執行緒本身的類和函式,以及用於線上程之間同步資料或提供特定於各個執行緒的資料的單獨副本的其他類。 #include

C++Boost學習timer

目錄 1.timer庫概述 ^   timer是一個很小的庫,提供簡易的計時功能,對了解程式執行所需的時間在測試和生產環境中都很有用。   舊版本的計時器已經被棄用了,取而代之的是是更符合當前boost實踐的CPU計時器cpu_timer和auto_c

muduo網路學習EventLoop(二):程序(執行緒)wait/notify 和 EventLoop::runInLoop

// 事件迴圈,該函式不能跨執行緒呼叫 // 只能在建立該物件的執行緒中呼叫void EventLoop::loop() {// 斷言當前處於建立該物件的執行緒中  assertInLoopThread();     while (!quit_)     {         pollReturnTime_ =

muduo網路學習Timestamp、AtomicIntegerT 封裝中的知識點

一、Timestamp類封裝 class Timestamp : public muduo::copyable,                  public boost::less_than_

數據學習專攻

mysql 專攻第一天1.數據庫設計和sql語句 增刪改查2.數據可高級開發 視圖 函數 存儲過程 食物和鎖 索引3.數據庫管理 dba管理mysql安全數據庫備份還原復制 負載均衡 時時備份 日誌管理(1)oracle (2)mysql 免費開源 中小企業 和linux apache php lamp 網站

機器學習numpy中常用的函數介紹(一)

做的 string idt 維度 數據 round float 數值 array 1. mat() mat()與array的區別: mat是矩陣,數據必須是2維的,是array的子集,包含array的所有特性,所做的運算都是針對矩陣來進行的。 array是數組,數據可以是多

Mysql數據學習mysql半同步復制簡析

mysql數據庫 數據庫管理員 數據庫工程師 數據庫開發 從5.7版本開始MySQL通過擴展的方式支持了半同步復制,當主庫執行一個更新操作事務時,提交操作會被阻止直到至少有一個半同步的,復制slave確認已經接收到本次更新操作,主庫的提交操作才會繼續,半同步復制的slave發送確認消息只會在本

Mysql數據學習高可用架構Atlas簡析

mysql數據庫 北京mysql mysql周末 數據庫管理員   Atlas是一個基於MySQL協議的數據中間層項目,在MySQL-Proxy 0.8.2版本基礎上修改了大量bug,添加了很多功能特性。目前該項目很多MySQL業務已經接入了Atlas平臺,每天承載的讀寫請求數達幾十億條。 

數據學習ACCESS與SqlServer配什麽編程語言好?

數據庫 ACCESS sql 編程 互聯網 作為一個剛開始學習編程的菜鳥,對數據庫自然是不能馬虎的,我最近就在學習這方面的知識,先了解一下ACCESS這種微軟的輕量級小型數據庫,然後再深入學習sql server中型數據庫,這樣由淺入深,可以降低學習的難度,因為新手接觸sql server

MySQL數據學習SQL語句如何優化?數據開發

郵箱 list key 推薦 sin ges 操作 開關 RoCE   1) 現場抓出慢查詢語句 show full processlist;  2) 配置參數:  slow_query_log_file = ON 慢查詢開啟開關  long_query_time =2 記

數據學習MySQL基礎

asa ifnull 大小 分享圖片 on() 統計 密碼 空格 from 數據庫基礎 一、數據庫簡介 數據庫:存放數據的倉庫 sql及其規範 sql是Structured Query La

數據學習MySQL進階

對數 用戶 local fault 已提交 組合 窗口 email ability 數據庫進階 一、索引 1.索引簡介 索引在MySQL中也叫做“鍵”,是存儲引擎用

sklearn學習樸素貝葉斯分類器

樸素貝葉斯模型 樸素貝葉斯模型的泛化能力比線性模型稍差,但它的訓練速度更快。它通過單獨檢視每個特徵來學習引數,並從每個特徵中收集簡單的類別統計資料。想要作出預測,需要將資料點與每個類別的統計資料進行比較,並將最匹配的類別作為預測結果。 GaussianNB應用於任意連續資料,

sklearn學習線性模型

線性模型利用輸入特徵的線性函式進行預測,學習線性模型的演算法的區別: (1)係數和截距的特定組合對訓練資料擬合好壞的度量方法,不同的演算法使用不同的方法度量“對訓練集擬合好壞”–稱為損失函式 (2)是否使用正則化,使用哪種正則化方法 線性模型的主要引數是正則化引數,如果假定只有幾個特徵是

sklearn學習K-NN演算法

k近鄰分類與k近鄰迴歸 import matplotlib.pyplot as plt from sklearn.neighbors import KNeighborsRegressor from sklearn.neighbors import KNeighborsClassifier

sklearn學習決策樹

決策樹 學習決策樹,就是學習一系列if/else問題,在機器學習中,這些問題叫做測試,演算法搜尋所有可能的測試,找出對目標變數來說資訊量最大的哪一個。 演算法過程生成一棵二元決策樹,其中每個結點都包含一個測試。將每個測試看成沿著一條軸對當前資料進行劃分,由於每個測試僅僅關注一個特徵,所以

機器學習Pandas

1.1 pandas庫總體說明 Pandas基於NumPy、SciPy補充的大量資料操作功能,能實現統計、分組、排序、透視表,可以代替Excel的絕大部分功能 Pandas主要有2種重要資料結構:Series、DataFrame(一維序列,二維表)。資料型別的轉換需要用到pd.Series/

機器學習Scipy

1.1 總體說明 SciPy是一款方便、易於使用、專為科學和工程設計的Python工具包。它包括統計、優化、涉及線性代數模組、傅立葉變換、訊號和影象處理、常微分方程求解器等眾多數學包。 1.2 代表性函式使用介紹 1.最優化 (1)資料建模和擬合 SciPy函式curve_fit

C++Boost學習智慧指標 shared_ptr

目錄 1.共享指標shared_ptr ^   使用例子 ^ #include<boost/shared_ptr.hpp> using namespace boost; using std::cout; using std::endl; str