高效能的web伺服器squit每秒可處理上萬併發的請求,從網路連線到伺服器的客戶端與服務端在互動時會保持一種(和**通話的場景類似)。伺服器端為了管理好所有的客戶端連線,給每個連線都編了乙個唯一的整數編號,叫做檔案控制代碼,簡稱fd。為了防止某些惡意連線消耗系統資源,當某個客戶端連線超時(在設定的一定時間內沒有傳送資料)時,伺服器就需要關閉這些客戶端的連線
實現方案:
1.當有新的請求連到伺服器時,如果經過伺服器頻率限制塊判斷,貌似惡意連線,則使用順序表來保持此連線的超時資料,超時值使用時間戳來表示,時間戳是指格林威治時間2023年01月01日00時00分00秒(相當於北京時間2023年01月01日00時00分00秒)起至現在的總秒數。
2.伺服器程式每隔一秒掃瞄一次所有的連線,檢查是否超時,如果存在超時的連線,就關閉連線,結束服務,同時將順序表中的記錄清除!
//開發工具:vs2019
#pragma once
#include
#define max_size 100
typedef
struct
conntimeout;
typedef
struct
timeoutsqlist;
bool initlist
(timeoutsqlist& l)
;(timeoutsqlist& l, conntimeout e)
;bool listdelete
(timeoutsqlist& l,
int i)
;void
listdestory
(timeoutsqlist& l)
;void
listprint
(timeoutsqlist& l)
;
#include
#include
#include
"webserver.h"
using namespace std;
static
void
checktimeouts
(timeoutsqlist& l, time_t now)
;int
main()
listprint
(l);
dosleep(10
);time
(&now);}
while
(now < end)
;system
("pause");
listdestory
(l);
return0;
}void
checktimeouts
(timeoutsqlist& l, time_t now)
//超時,清理連線
fd = l.elems[i]
.fd;
//關閉連線
cout <<
"連線[fd="
<< fd <<
"]已經超時,關閉連線"
<< endl;
//刪除
listdelete
(l, i)
;//i必須減1,不然容易直接跳過被刪元素的後1個元素,******************
資料結構之順序表
首先是標頭檔案seqlist.h ifndef seqlist h define seqlist h include includeusing namespace std define elemtype int define seqlist default size 10 typedef struc...
資料結構之順序表
順序表的思想容易了解,但是 不容易掌握,我這裡根據老師所提供的 進行一下簡單的總結 這個 包含順序表的查詢,插入,刪除,建表,輸出資料 includeusing namespace std define ok 1 define error 0 define overflow 2 typedef in...
資料結構之順序表
順序表就是按照順序儲存方式儲存的線性表,該線性表的結點按照邏輯次序一次存放在計算機的一組連續的儲存單元中如下圖 由於順序表是一次存放的,只要知道了該順序表的首位址以及每個資料元素所占用的儲存長度,那麼我們就很容易計算出任何乙個資料元素 也就是資料繫結點 的位置。1 結點資料型別 public cla...