📄 说明.txt
字号:
基于完成端口的TCP网络通信框架实现
工程iocp中包含了框架实现的所有代码,工程server和client是对该框架的简单测试
和应用。框架实现了基于消息的TCP网络通信,(避免了TCP的数据“粘连”问题)并进
行了封装,封装后的界面iocpapi.h非常简洁,应用程序代码只需要简单包含
iocpapi.h,就可以实现自己的网络应用.具体例子可以参考server和client代码提供
的两个类分别用于服务器端和客户端(一般来说客户端不用管理大量连接,所以有点
杀鸡用牛刀的味道,不过为了和服务器对应,应该使用该客户端,除非你自己实现
框架的消息格式)
以下内容为想更深入了解该框架的人士提供:
网络流上消息的格式为"两子节消息长度+消息体",框架以此来识别消息,
消息体格式任意,可以由应用自行定义,如果不使用该框架的客户端,
只需要实现该消息格式即可
如果应用想使用更原始的框架,比如,实现自己的消息格式,可以直接使用iocp.h
里面的类。原始框架不区分消息边界
主要技术细节问题
1 数据包的顺序问题
框架保证在同一连接上的数据收发的次序性(先发送先收到).具体实现是基于在每
个连接上最多同时只有一个WSASend操作(发送次序性)和一个WSARecv操作(接收次序性)
来保证的
2 资源的释放
框架保证资源的正确释放,无论是主动或者被动断开连接,每个连接仅被释放一次,
处理函数被调用一次.完成端口队列里面遗留的数据被正确清理
框架的优点:
1 简洁,可扩展,
使用非常方便,并且应用不需要关心实现代码的任何细节,只需要派生iocpapi.h里的两个类即可
2 线程无关性
应用不需要关心任何和线程相关的细节,所有线程相关的问题隐藏在实现背后
框架缺点:
1 框架未实现自身内存管理
由于频繁的收发数据包,系统的内存分配效率低,并且存在碎片问题,框架本身
所有内存都是通过new和delete管理的,如果要在该框架的基础上实现内存管理,
就需要修改本身的代码,针对
1)NetMessage,PerIoData重载new和delete运算符
2)修改类中标准容器list,map等的分配器
2 框架未进行客户端管理
这是为了尽量轻量级的实现框架,其实框架内部对SOCKET有管理,之所以没有提供
接口,是由于,
1)内部的管理过于简单,不适应于一般的应用
2)内部的管理数据不适宜暴露给用户
一般来说,应用应该自己管理所有的连接,并实现超时关闭的策略
3 框架未进行流量控制
这也属于管理的内容,连接数目过多,数据发送过于频繁,就会引起下面的问题
4 框架并非异常安全
如果流量过大,程序无法处理,那么内存会被耗尽,如果虚拟内存也被耗尽,那么
new 会失败,此时异常产生,程序崩溃,所以如果server需要管理非常大的流量,那么
应用程序本身需要进行流量控制
程序在内网上测试6个小时测试通过,没有在外网上测试过
本人联系方式
QQ 89707598
very_fyy@163.com
如果你使用该类,请尽量把你的疑惑,发现的问题和评价通过以上方式告知本人
2007-04-13
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -