1、概述
本節(jié)結(jié)合 "利用ACL庫開發(fā)高并發(fā)半駐留式線程池程序" 和 "利用ACL庫快速創(chuàng)建你的網(wǎng)絡(luò)程序" 兩篇文章的內(nèi)容,創(chuàng)建一個簡單的線程池網(wǎng)絡(luò)服務(wù)器程序。
2、并發(fā)式網(wǎng)絡(luò)通信實(shí)例
C代碼
#include "lib_acl.h" /* 先包含ACL庫頭文件 */
#include
#include
/**
* 單獨(dú)的線程處理來自于客戶端的連接
* @param arg {void*} 添加任務(wù)時的對象
*/
static void echo_client_thread(void *arg)
{
ACL_VSTREAM *client = (ACL_VSTREAM*) arg;
char buf[1024];
int n;
/* 設(shè)置客戶端流的讀超時時間為30秒 */
ACL_VSTREAM_SET_RWTIMO(client, 30);
/* 循環(huán)讀客戶端的數(shù)據(jù),直到其關(guān)閉或出錯或超時 */
while (1) {
/* 等待讀客戶端發(fā)來的數(shù)據(jù) */
n = acl_vstream_read(client, buf, sizeof(buf));
if (n == ACL_VSTREAM_EOF)
break;
/* 將讀到的數(shù)據(jù)寫回至客戶端流 */
if (acl_vstream_writen(client, buf, n) == ACL_VSTREAM_EOF)
break;
}
/* 關(guān)閉客戶端流 */
acl_vstream_close(client);
}
/**
* 創(chuàng)建半駐留線程池的過程
* @return {acl_pthread_pool_t*} 新創(chuàng)建的線程池句柄
*/
static acl_pthread_pool_t *create_thread_pool(void)
{
acl_pthread_pool_t *thr_pool; /* 線程池句柄 */
int max_threads = 100; /* 最多并發(fā)100個線程 */
int idle_timeout = 10; /* 每個工作線程空閑10秒后自動退出 */
acl_pthread_pool_attr_t attr; /* 線程池初始化時的屬性 */
/* 初始化線程池對象屬性 */
acl_pthread_pool_attr_init(&attr);
acl_pthread_pool_attr_set_threads_limit(&attr, max_threads);
acl_pthread_pool_attr_set_idle_timeout(&attr, idle_timeout);
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |