使用協程方式編寫高併發的 WEB 服務

2021-09-12 06:04:13 字數 1728 閱讀 1111

在《使用 acl 協程編寫高併發網路服務》中介紹了乙個使用 acl 協程庫編寫高併發網路服務的應用示例,本節將展示乙個稍微複雜些且更具實際意義的例子:基於協程的 web 伺服器程式。下面首先展示這個 web 伺服器程式:

#include "lib_acl.h"			// acl 基礎庫標頭檔案

#include "fiber/lib_fiber.h" // acl 協程庫標頭檔案

#include "acl_cpp/lib_acl.hpp // acl c++ 封裝庫標頭檔案

#define stack_size 32000 // 指定協程堆疊大小(位元組)

static int __rw_timeout = 0; // 網路 io 超時時間(秒)

// 銷毀客戶端連線物件

delete conn;

}static void fiber_accept(acl_fiber *, void *ctx)

else

printf("open %s ok\r\n", addr);

while (true)

client->set_rw_timeout(__rw_timeout);

printf("accept one: %d\r\n", client->sock_handle());

// 建立協程處理 http 客戶端連線請求

// 建立服務監聽協程

acl_fiber_create(fiber_accept, addr.c_str(), stack_size);

// 啟動協程排程過程

acl_fiber_schedule();

return 0;

}

此例子的流程為:建立服務監聽協程 ---> 啟動協程排程過程 ---> 監聽協程收到 http 客戶端連線後,建立 http 協程處理該連線 ---> http 協程與 http 客戶端進行互動。

因為協程相對於執行緒來說是非常輕量級的,所以雖然針對每乙個 http 客戶端連線都會建立乙個新的協程,但這並不會費太多系統資源,因而可以支援非常高的併發連線。

個人微博:

國內映象:

qq 群:242722074

使用協程方式編寫高併發的 WEB 服務

在 使用 acl 協程編寫高併發網路服務 中介紹了乙個使用 acl 協程庫編寫高併發網路服務的應用示例,本節將展示乙個稍微複雜些且更具實際意義的例子 基於協程的 web 伺服器程式。下面首先展示這個 web 伺服器程式 include lib acl.h acl 基礎庫標頭檔案 include fi...

協程 基於TCP的高併發通訊

from gevent import monkey monkey.patch all from socket import import gevent defsever ipport s socket af inet,sock stream s.setsockopt sol socket,so re...

python(33) 高併發 協程 Gevent

協程 實現單執行緒下的高併發。例如web高併發伺服器,nginx,nodejs,其實都是單執行緒,而如何實現上萬的高併發呢,用的就是協程。個人理解,協程快就是無論你啟動了幾個函式,整個程式的執行時長 最長的那個函式時長 整個程式,無論你啟動幾個函式,執行花費 只用了函式中最長的那個時間 2s 2.執...