这几天把net工程的实现进行了一次大整改,框架更复杂一些,但是能使后期修改、维护以及功能增加更为方便。
之前版本分server和client,现今版本融合了两者,协议实现者可以使用其中一种或两种
之前版本的消息会通知到server、client,所以使用者需要继承server和client,实现自己的handle_message方法
现今版本的消息会从manager通知到message_handler,所以使用者需要继承message_handler
乍一听,都是继承,好像差不多,其实不然
之前版本的派生类的实现者写代码很不方便:
1. 继承层次多,而且中间层还有多继承,所以定义自己的函数时,名字有约束,可能不能重名,导致有好名字却不能用
2. 每个派生类的写法都有一定的相似处,而这种相似处却没能封装在基类中
之前版本的派生类的使用者写代码也很不方便:
1. 还是因为继承层次太多,写代码者需要看遍继承线上的所有接口才能知道有些什么功能
现今版本的相对优势:
1. 槽已经实现了需要的相似功能,并且私有化之,剩下全为纯虚函数,派生类的实现者只要继承槽,并实现自己的协议即可
2. 代码使用者,只需要关注manager的接口,不需要关注槽的派生类的实现,因为他基本上不需要使用槽的接口
3. 对外的socket参数也改为了自定义类型的参数,防止了外部使用者无意或有意的错误操作
4. 此次manager彻底屏蔽了windows与linux的区别,使用者只需要看到manager这一层即可
连接数现状:
linux下连接1017个后,就会产生错误:
error 24: 打开文件数过多
windows下连接个3963后,就会产生错误:
error 10048: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次
error 10055: 由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作
2013-07-18 18:50:03
common/base:
1. base_directory.h 遍历目录
2. base_memory_pool.hpp 内存池
3. base_time.h 修改个别函数参数、返回值的类型
common/net:
1. net_common_types.h 一些用于跨平台的macro、typedef
2. net_tcp_handler_base.h 网络字节流的数据处理基类 (实现类)
3. net_tcp_server_base.h tcp server的纯虚基类 (接口类)
4. net_tcp_server.h tcp server的基类 (派生类可按需要实现: send_message、handle_message)
5. net_tcp_client.h tcp client的基类 (派生类可按需要实现: send_message、handle_message)
2013-07-23 22:37:45
common/net:
修改掉linux下的BUG,并优化部分实现,此版本的net基本稳定,包括效率与功能
2013-07-27 20:51:03
common/base:
1. base_log_types.h 修改日志模式的名字
2. base_string.h 增加功能: 去除字符串头尾指定字符、忽略大小写比较、字符串与标量类型的转换
3. base_ini.h ini配置文件的读取、修改
2013-07-27 21:50:12
common/base:
1. base_ini.h 增加读取、修改boolean类型配置的接口
2013-08-03 16:40:54
common/base:
1. base_ini.h 公开clear接口,修改了一处BUG
common/net:
对框架进行了一次大整改
1. net_linux_tcp_connection.h 实现linux下的tcp基本操作 (epoll)
2. net_windows_tcp_connection.h 实现windows下的tcp的基本操作 (iocp)
3. net_tcp_connection.h 包含上面两个头文件
4. net_data_handler.h 缓存、拆分、组合网络数据
5. net_tcp_manager.h 封装了tcp的所有操作,设置个IMessageHandler的槽后,消息会通知到槽
6. net_message_handler_base.h 外部消息操作的基类,使用者须写一个处理自身协议的子类,用来处理消息、协议
字符串与标量类型的转换功能:一开始用C++的流来做,很方便,还能写成函数模板;但发现精度不如C函数,而且容错能力也不足,所以最终采用C函数来实现。
---------------------------------------------------------------------
08-04: 上面那句话不对,用流来做的话,设置流的精度之类,就可以很好的解决上面的问题,最新版本已经加入C++的解决方案,ini配置也改成调用此方案来实现
2013-08-04 20:55:21
common/base:
1. base_convert.hpp 字符串与内建类型数据之间的C++转换方法
2. base_ini.h 获知、设置配置的实现接口改成模板成员函数
3. base_utility.h 助手函数集合,现只提供导入日志配置的功能
---------------------------------------------------------------------
09-03: 用公司环境测试,windows下可建立30000多连接