1 / 17
文档名称:

服务器概要设计.docx

格式:docx   大小:2,118KB   页数:17页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

服务器概要设计.docx

上传人:布罗奇迹 2022/7/3 文件大小:2.07 MB

下载得到文件列表

服务器概要设计.docx

相关文档

文档介绍

文档介绍:服务器概要设计
目录
功能概述 3
网络通信层 4
连接生命周期的管理 5
接口 6
异步IO缓冲内存池 6
本地数据与字节流数据的互相转换 6
信令和通信数据结构 8
伪代码定义 8
命令管理 12
数据有效信层会删除这份数据,同时表明该连接生命周期终止。
接口
数据接口采用handle/body手法,连接的handle采用整形数据,body采用C++对象封装连接数据,数据包含SOCKET句柄、连接状态和当前接收缓存(业务层)等。连接生命周期反映到handle上表现为该handle是否为有效。发送内存采用智能指针(unique_ptr, stl_c++11)进行传递,这里用到了智能指针对数据和数据析构的封装,发送完成之后直接调用其删除器(deleter)进行内存的删除,这样上下层之间就避免了一次内存拷贝。
回调接口为C++接口(纯虚函数)。
异步IO缓冲内存池
由于系统层和stl层容器都实现了小内存内存池,所以程序将不再实现自己的内存池,发送缓冲内存完全动态分配,接收缓冲内存每个连接有一份,也通过动态分配而来。
本地数据与字节流数据的互相转换
本地数据转换为字节流数据时,根据本地数据大小构造字节流对象,然后将本地数据逐字节
填入流中,可变数组先填入数组大小再逐个填充数组内容。
字节流数据转换为本地数据时,根据字节流中标识的大小动态构造本地数据,构造时使用智能指针(unique_ptr, stl_c++11)管理数据,加上C++多态特性,可以大大简化内存的管理。
信令和通信数据结构
信令设计的原则是方便数据分析,即通过抓包工具得到数据后能够方便地定位到信令所属业务类型。通信数据结构的设计原则是数据之间相互独立,减少耦合,但是又方便扩展,而且方便与本地数据之间的转换。
由于交互三方(服务器、终端、物管)采用三种不同的语言来实现,数据结构的定义必然各有不同,所幸三方都是面向对象语言,因此可以使用C++定义作为其他两方的伪代码来参考。
数据结构统一处于同一包头定义下,即都继承自同一个包头基类。
伪代码定义
class DemoPacket : public PacketHead {
public:
DemoPacket() : PacketHead(0, kPacketTypeDemo, 0) {}
DemoPacket(const PacketHead& head) : PacketHead(head) {}
virtual ~DemoPacket() override {}
virtual bool Read(PacketReadStream& stream) override {
if ((a_) &&
(b_) &&
(stream) &&
(stream)) {
return true;
}
return false;
}
virtual bool Write(PacketWriteStream& stream) override {
if (PacketHead::Write(stream) &&
(a_) &&
(b_) &&
(stream) &&
(stream)) {
return true;
}
return false;
}
virtual int CalculateSize() override {
auto total_size = 0;
total_size += PacketHead::CalculateSize();
total_size += sizeof(a_);
total_size += sizeof(b_);
total_size += ();
total_size += ();
return total_size;
}
public:
BYTE4 a_; // 四字节整型字段
BYTE4 b_; // 四字节整型字段
PacketArrayBYTE1 c_; // 字符串字段
PacketArray<Obj> d_; // 可变数组字段,