上篇文章說了下 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 長...