利用ACL開發併發網路伺服器

2021-04-23 11:52:35 字數 1215 閱讀 2065

1、概述

本節結合 "利用acl庫開發高併發半駐留式執行緒池程式" 和 "利用acl庫快速建立你的網路程式" 兩篇文章的內容,建立乙個簡單的執行緒池網路伺服器程式。

2、並髮式網路通訊例項

#include "lib_acl.h"  /* 先包含acl庫標頭檔案 */

#include 

#include 

/*** 單獨的執行緒處理來自於客戶端的連線

* @param arg  新增任務時的物件

*/static void echo_client_thread(void *arg)

/* 關閉客戶端流 */

acl_vstream_close(client);

}/**

* 建立半駐留執行緒池的過程

* @return  新建立的執行緒池控制代碼

*/static acl_pthread_pool_t *create_thread_pool(void)

/*** 開始執行

*/static void run(const char *addr)

printf("%s: listen %s ok/r/n", myname, addr);

while (1) 

printf("accept one/r/n");

/* 獲得乙個客戶端連線流 */

/* 開始處理該客戶端連線流 */

/*** 向執行緒池中新增乙個任務

* @param thr_pool 執行緒池控制代碼

* @param echo_client_thread 工作執行緒的**函式

* @param client 客戶端資料流

*/acl_pthread_pool_add(thr_pool, echo_client_thread, client);

}/* 銷毀執行緒池物件 */

acl_pthread_pool_destroy(thr_pool);

}/**

* 初始化過程

*/static void init(void)

/*** 使用提示介面

* @param procname  程式名

*/static void usage(const char *procname)

int main(int argc, char *argv)

init();

run(argv[1]);

return (0);

}

關於網路伺服器

假如我有數千萬甚至是上億的使用者資料,我想把使用者自增id和使用者名稱username放到快取裡。我的需求是,當要查詢使用者的資訊時,我想先從快取裡根據使用者名稱username獲取到使用者的id,然後再通過id在資料庫裡查詢使用者的資訊。我想當乙個使用者表達到上億的數量級別時,用自增id來查詢肯定...

網路伺服器宕機

1.伺服器程序終止 當伺服器程序終止時,伺服器傳送fin給客戶端,客戶端回以ack,客戶端進入close wait狀態,但還沒有結束連線。此時客戶端阻塞於fgets,客戶端繼續傳送buffer,伺服器傳送rst,客戶端readline返回0。而如果客戶端不理睬readline返回的rst,繼續wri...

linux網路伺服器

在本次中,學習了乙個簡單的基於tcp ip的伺服器 客戶端。在例子中,利用的是af inet域。在linux下,最常用就是af inet,af unix.af unix是linux檔案系統實現的本地要借字。後面的是可以用於包括英特網在內的tcp ip網路通訊的程式。下面來看乙個簡單的基於tcp ip...