[common-sln]: net工程进行大整改

这几天把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多连接



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值