UDP併發伺服器模型 二 select機制

2021-07-04 08:39:45 字數 752 閱讀 2680

上篇文章說了下 udp 併發模型。然後筆者也自己編寫了一套**,基本上能顯示 udp 併發機制。大致原理參考:

select機制能很好地提供多路io功能。對於本套**,已基本上能提供類似 select 的功能
主要函式介面:

void listen_head_init(struct list_head *head)

初始化乙個 煉表頭

int listen_add(struct list_head *head, listen_t *listen)

將要監聽的 listen 新增到這個煉表頭

recv_from_listen_head

從鍊錶中獲取資料

示例:

//我們建立兩個 listen_head 

struct list_head poll_head_1, poll_head_2;

int main(int argc, char *argv)

printf("new client \r\n");

if(poll_num < 5)

else

}}

然後我們就可以從中兩個 listen_head 中讀取資料了
while(1)

else

printf("sento [%s]\r\n", buf);

}}

UDP高階技術(併發伺服器)

通常所見的的tcp伺服器都是併發實現的,即服務同時處理多個請求,而不是等待前乙個完成再處理下乙個請求,這個實現得益於tcp的listen 與connect 的分工處理機制。具體為,伺服器監聽來自客戶的連線,當乙個請求到來時,伺服器fork 乙個子程序,處理該請求,然後父程序繼續監聽外部請求。但在ud...

高效併發伺服器模型

1 單執行緒 阻塞 同步模型 適用範圍 單一連線 缺點 多連線時相互影響,乙個阻塞,別的也得不到響應 2 多程序 阻塞 同步模型 適用範圍 連線數較少,且使用的資源較多,比如檔案操作 缺點 系統程序數有上限,不適用大量併發連線,且程序間切換開銷較大 3 多執行緒 阻塞 同步模型 適用範圍 連線數較少...

常見併發伺服器模型

1 短連線 如果是長連線則需要在read與write之間增加乙個迴圈,那樣的話外層迴圈無法退出,接收不到其它連線請求,即只能服務乙個客戶端 2 單執行緒,無法充分利用多核cpu 3 不適合執行時間較長的服務 encode compute decode執行時間過長會影響其他客戶端連線的響應速度 1 長...