• 大小: 224KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: 其他
  • 标签: C++,通讯  

资源简介

这个工程是基于TCP长连接的包模式的网络通讯框架。 在TCP连接中,按照一个一个的包方式进行数据传输, 框架实现了可以同时侦听多个端口, 每个数据包既可以不压缩传输,也能支持zlib压缩和blowfish加密传输。 服务端提供三种线程池来进行tcp连接处理, 一类是接收线程池,接收线程池获取每个socket传输来的数据包, 同时保证每个socket的包按照到来的顺序进行处理, 二类是工作线程池,由接收线程池把接收到的数据包投递到工作线程池, 工作线程池专门处理这些接收到的数据包。 三类是发送线程池,当工作线程池处理完这些数据包,确定需要发送处理结果数据包到客户端, 或者其他线程需要发送数据包到客户端,他们首先把数据包投递到发送线程池, 发送线程池专门负责数据包的发送。 框架同时提供了每个客户端的定时器功能,在服务端内部各个socket之间数据通信等。 框架来源于一个没做完的手游服务端,至于没有使用现成的游戏通讯框架而自己实现, 主要是因为习惯了自己造轮子。 因为项目没做完,所有没进行严格的测试,无法保证代码无BUG。 您若要使用到自己的项目中,请完全熟悉了之后再用,这样出现BUG也好自己修改。 框架支持 Linux和windows平台。 相关BLOG请看如下连接: http://blog.csdn.net/fanxiushu/article/details/50631626

资源截图

代码片段和文件信息

///// By Fanxiushu 2015-10-15 用于服务端接管内存分配释放
#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_COUNT; ++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 的倍数
}

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_COUNT; ++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); ////
}

/////////////////



 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        967  2016-01-31 21:58  base_client\base_client.sln

    ..A..H.     44544  2016-01-31 22:22  base_client\base_client.v12.suo

     文件       5499  2015-10-19 17:48  base_client\base_client.vcxproj

     文件       3343  2015-10-19 17:48  base_client\base_client.vcxproj.filters

     文件       2762  2015-10-20 16:20  base_client\src\base_buffer.cpp

     文件        477  2015-10-19 17:22  base_client\src\base_buffer.h

     文件      17596  2015-10-23 17:20  base_client\src\blowfish.cpp

     文件       3822  2016-01-31 22:00  base_client\src\client.cpp

     文件       9633  2015-10-19 17:42  base_client\src\common.cpp

     文件       7653  2015-10-20 16:16  base_client\src\common.h

     文件       6417  2015-12-31 00:30  base_client\src\crypt_msg.cpp

     文件       1264  2015-10-21 13:59  base_client\src\crypt_msg.h

     文件       2377  2015-10-20 16:22  base_client\src\list_entry.h

     文件       1321  2016-01-31 21:55  base_server\base_server.sln

    ..A..H.     89088  2015-12-31 03:08  base_server\base_server.suo

    ..A..H.     71680  2016-02-03 23:46  base_server\base_server.v12.suo

     文件       9594  2016-01-31 21:51  base_server\base_server.vcxproj

     文件       4164  2015-10-20 14:21  base_server\base_server.vcxproj.filters

     文件        165  2015-10-12 15:36  base_server\base_server.vcxproj.user

     文件        764  2015-10-20 16:47  base_server\makefile

     文件       2439  2016-02-03 22:50  base_server\src\main.cpp

     文件       2837  2015-11-22 01:00  base_server\src\server\base_buffer.cpp

     文件        477  2015-10-19 17:22  base_server\src\server\base_buffer.h

     文件      29329  2016-01-31 22:48  base_server\src\server\base_server.cpp

     文件      10539  2016-02-03 22:55  base_server\src\server\base_server.h

     文件      17503  2015-10-20 16:56  base_server\src\server\blowfish.cpp

     文件      28433  2015-11-03 11:22  base_server\src\server\cJSON.cpp

     文件       7526  2015-02-13 18:53  base_server\src\server\cJSON.h

     文件       9633  2015-10-19 17:42  base_server\src\server\common.cpp

     文件       7672  2015-10-23 13:51  base_server\src\server\common.h

............此处省略44个文件信息

评论

共有 条评论

相关资源