TCP的高併發伺服器模型

2021-09-29 07:41:35 字數 2519 閱讀 4010

單客戶端單程序,統一accept()

原型介紹:

此併發伺服器模型並不預先分叉程序,而是主程序統一處理客戶端的連線,當客戶端的請求到達時,才臨時fork()程序,由子程序處理客戶端請求。

利用socket()函式建立套接字,呼叫bind()函式繫結位址,呼叫listen()函式來監聽佇列長度,然後進入主處理過程,等待客戶端連線的到來。當客戶端連線到來時,伺服器的accept()函式成功返回,此時伺服器進行程序分叉,父程序等待客戶端請求,兒子程序處理客戶端請求。

框架如圖:

**例項:客戶端傳送請求,內容為time的字串,伺服器端handle_connect()函式接收請求,進行判斷後,將時間反饋給客戶端,伺服器接收到客戶端的乙個請求之後,之後臨時fork()乙個程序,父程序等待下乙個請求,子程序處理客戶端請求。函式handle_request()接收客戶端請求,判斷是否與time匹配。

伺服器端:

#include#include#include#include#include#include#include#include#include#define server_port 7000//設定埠位址

#define buff_size 1024

#define backlog 5//設定監聽佇列長度

/*處理客戶端請求*/

static void handle_request(int connfd)

close(connfd);//關閉檔案描述符

}/*處理客戶端連線*/

static int handle_connect(int sockfd)

else//子程序}}

}int main(int argc, const char *ar**)

listen(sockfd,backlog);//監聽

handle_connect(sockfd);//處理客戶端連線

close(sockfd);

return 0;

}

客戶端:

#include#include#include#include#include#include#include#include#define server_port 7000

#define buff_size 1024

int main(int argc, const char *ar**)

memset(buff,0,buff_size);//清零

/*接收資料*/

n=recv(sockfd,buff,buff_size,0);

if(n>0)

close(sockfd);

return 0;

}

單客戶單執行緒,統一accept()

執行緒與程序相比,速度更快,占用資源更少,而且資料可以共享。其框架如下:

****例項:**客戶端傳送請求,內容為time的字串,伺服器端handle_connect()函式接收請求,進行判斷後,將時間反饋給客戶端,伺服器接收到客戶端的乙個請求之後,之後建立乙個線程程,處理客戶端請求。函式handle_request()接收客戶端請求,判斷是否與time匹配。

伺服器端::

#include#include#include#include#include#include#include#include#include#include#define server_port 7000//設定埠位址

#define buff_size 1024

#define backlog 5//設定監聽佇列長度

/*處理客戶端請求*/

static void handle_request(void *ar**)

close(connfd);//關閉檔案描述符

}/*處理客戶端連線*/

static int handle_connect(int sockfd)

}}int main(int argc, const char *ar**)

listen(sockfd,backlog);//監聽

handle_connect(sockfd);//處理客戶端連線

close(sockfd);

return 0;

}

客戶端:

#include#include#include#include#include#include#include#include#define server_port 8889

#define buff_size 1024

int main(int argc, const char *ar**)

memset(buff,0,buff_size);//清零

/*接收資料*/

n=recv(sockfd,buff,buff_size,0);

if(n>0)

close(sockfd);

return 0;

}

TCP併發伺服器模型(一)

本篇敘述的tcp併發伺服器模型如下圖所示 伺服器建立並繫結套接字後fork出幾個子程序,子程序中分別進行accept 該函式為阻塞函式 recv 處理資料然後再次acept,這樣迴圈下去。所有客戶端發來的資訊都是直接由子程序處理。例程 如下,在處理客戶端請求之前,伺服器先fork了3個子程序,然後將...

linux c 高併發tcp伺服器架構

from epoll 接受資料到佇列,執行緒池處理佇列裡的資料 具體實現方式 只使用使用std的的資料結構,未使用boost thread pool.cpp include include include thread pool.h include thread process.h include ...

IO模型與TCP併發伺服器

io模型與tcp併發伺服器 io模型 1 阻塞io 2 非阻塞io 3 io多路復用 4 訊號驅動io 1 阻塞io 最常用 預設設定 io scanf printf 預設的io裝置 fgetc fputc 標準io fgets fputs fread fwrite read write 檔案io,...