資源簡介
這個(gè)工程是基于TCP長連接的包模式的網(wǎng)絡(luò)通訊框架。
在TCP連接中,按照一個(gè)一個(gè)的包方式進(jìn)行數(shù)據(jù)傳輸,
框架實(shí)現(xiàn)了可以同時(shí)偵聽多個(gè)端口,
每個(gè)數(shù)據(jù)包既可以不壓縮傳輸,也能支持zlib壓縮和blowfish加密傳輸。
服務(wù)端提供三種線程池來進(jìn)行tcp連接處理,
一類是接收線程池,接收線程池獲取每個(gè)socket傳輸來的數(shù)據(jù)包,
同時(shí)保證每個(gè)socket的包按照到來的順序進(jìn)行處理,
二類是工作線程池,由接收線程池把接收到的數(shù)據(jù)包投遞到工作線程池,
工作線程池專門處理這些接收到的數(shù)據(jù)包。
三類是發(fā)送線程池,當(dāng)工作線程池處理完這些數(shù)據(jù)包,確定需要發(fā)送處理結(jié)果數(shù)據(jù)包到客戶端,
或者其他線程需要發(fā)送數(shù)據(jù)包到客戶端,他們首先把數(shù)據(jù)包投遞到發(fā)送線程池,
發(fā)送線程池專門負(fù)責(zé)數(shù)據(jù)包的發(fā)送。
框架同時(shí)提供了每個(gè)客戶端的定時(shí)器功能,在服務(wù)端內(nèi)部各個(gè)socket之間數(shù)據(jù)通信等。
框架來源于一個(gè)沒做完的手游服務(wù)端,至于沒有使用現(xiàn)成的游戲通訊框架而自己實(shí)現(xiàn),
主要是因?yàn)榱?xí)慣了自己造輪子。
因?yàn)轫?xiàng)目沒做完,所有沒進(jìn)行嚴(yán)格的測試,無法保證代碼無BUG。
您若要使用到自己的項(xiàng)目中,請完全熟悉了之后再用,這樣出現(xiàn)BUG也好自己修改。
框架支持 Linux和windows平臺(tái)。
相關(guān)BLOG請看如下連接:
http://blog.csdn.net/fanxiushu/article/details/50631626

代碼片段和文件信息
/////?By?Fanxiushu?2015-10-15?用于服務(wù)端接管內(nèi)存分配釋放
#include?“common.h“
#include?“base_buffer.h“
int?base_buffer::header_length?=?(int)(int64_t)(&((base_buffer*)0)->buffer[0]);
///////
struct?BUF_SOLT
{
int???????????alloc_size;?///??分配的大小?64128?256?512?1K?4K?8K?16K?32K?64K?
LIST_ENTRY????head;???????///??
spin_lock_t???lock;???????///??
long??????????buf_count;??///??
////////
BUF_SOLT(?int?alloc_size?){
/////
InitializeListHead(&head);
spin_lock_init(lock);
this->alloc_size?=?alloc_size;?
this->buf_count?=?0;?
////////
// printf(“ALLOC_SIZE=%d\n“?alloc_size?);?/////
}
//////////////
~BUF_SOLT(){
spin_lock_deinit(lock);?////
/////
}
/////////////////
};
static?struct?BUF_SOLT??buf_solt[]?=?
{
BUF_SOLT(32)
BUF_SOLT(64)
BUF_SOLT(128)?
BUF_SOLT(256)
BUF_SOLT(512)
BUF_SOLT(1024)
BUF_SOLT(4096)
BUF_SOLT(8192)
BUF_SOLT(16*1024)
BUF_SOLT(32*1024)
BUF_SOLT(64*1024)
BUF_SOLT(128*1024)
};
/////
#define?BUF_SOLT_COUNT???(?sizeof(buf_solt)?/?sizeof(buf_solt[0])?)
base_buffer*?alloc_buffer(int?size)
{
if?(size?<=?0)?return?NULL;
////
int?alloc_size?=?0;
int?left_size?=?0;
BUF_SOLT*?solt?=?NULL;?
base_buffer*?base_buf?=?NULL;?////
for?(?int?i?=?0;?i? BUF_SOLT*?s?=?&buf_solt[i];
if?(?size?>?left_size?&&?size?<=?s->alloc_size?){
solt?=?s;
break;
}
left_size?=?s->alloc_size;??///?///
////
}
if?(solt){?
////
alloc_size?=?solt->alloc_size;
spin_lock(?solt->lock?);
if?(!IsListEmpty(&solt->head)){
PLIST_ENTRY?entry?=?RemoveHeadList(&solt->head);?/////
--solt->buf_count;
base_buf?=?CONTAINING_RECORD(entry?base_buffer?list);?/////
}
spin_unlock(?solt->lock?);?
}
else{
alloc_size?=?((size?+?7)?/?8)?*?8;?///?8?的倍數(shù)
}
if?(base_buf){
// printf(“**?ALLOC?Buffer?from?POOL.?raw_size=%d?alloc_size=%d\n“?size?base_buf->alloc_size?);
base_buf->data_size?=?0;
return?base_buf;
}
int?sz?=?base_buffer::header_length?+?alloc_size;
base_buffer*?buf?=?(base_buffer*)malloc(sz);
InitializeListHead(&buf->list);?
buf->alloc_size?=?alloc_size;?
buf->data_size?=?0;?
return?buf;?
}
void?free_buffer(base_buffer*?buf)
{
if?(!buf)?return;?
for?(int?i?=?0;?i? BUF_SOLT*?s?=?&buf_solt[i];
if?(s->alloc_size?==?buf->alloc_size){
// printf(“***?free?buffer?to?POOL.\n“);?///
spin_lock(?s->lock);?
InsertTailList(&s->head?&buf->list);?/////
++s->buf_count;
spin_unlock(?s->lock?);
return;?
}
///////
}
//////
printf(“***?Direct?FREE?BUFFER.\n“);
free(buf);?////
}
/////////////////
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????967??2016-01-31?21:58??ba
????..A..H.?????44544??2016-01-31?22:22??ba
?????文件???????5499??2015-10-19?17:48??ba
?????文件???????3343??2015-10-19?17:48??ba
?????文件???????2762??2015-10-20?16:20??ba
?????文件????????477??2015-10-19?17:22??ba
?????文件??????17596??2015-10-23?17:20??ba
?????文件???????3822??2016-01-31?22:00??ba
?????文件???????9633??2015-10-19?17:42??ba
?????文件???????7653??2015-10-20?16:16??ba
?????文件???????6417??2015-12-31?00:30??ba
?????文件???????1264??2015-10-21?13:59??ba
?????文件???????2377??2015-10-20?16:22??ba
?????文件???????1321??2016-01-31?21:55??ba
????..A..H.?????89088??2015-12-31?03:08??ba
????..A..H.?????71680??2016-02-03?23:46??ba
?????文件???????9594??2016-01-31?21:51??ba
?????文件???????4164??2015-10-20?14:21??ba
?????文件????????165??2015-10-12?15:36??ba
?????文件????????764??2015-10-20?16:47??ba
?????文件???????2439??2016-02-03?22:50??ba
?????文件???????2837??2015-11-22?01:00??ba
?????文件????????477??2015-10-19?17:22??ba
?????文件??????29329??2016-01-31?22:48??ba
?????文件??????10539??2016-02-03?22:55??ba
?????文件??????17503??2015-10-20?16:56??ba
?????文件??????28433??2015-11-03?11:22??ba
?????文件???????7526??2015-02-13?18:53??ba
?????文件???????9633??2015-10-19?17:42??ba
?????文件???????7672??2015-10-23?13:51??ba
............此處省略44個(gè)文件信息
評論
共有 條評論