PSS - 跨平台网络服务器框架


GPLv3
跨平台
C/C++

软件简介

目前代码更新更新在github上,就不维护多个服务器SVN了。

请到github上自取 ,地址为

https://github.com/freeeyes/PSS

PSS 是易于开发,基于插件的,跨平台网络服务器框架,支持开发者使用插件(so或者dll)的方式,开发相关TCP和UDP的逻辑服务。

本服务框架基于ACE,可以在windows和linux下自适应编译运行。

本服务框架的宗旨是尽量剥离网络IO和逻辑开发者之间的关系,让逻辑开发者更专注于自己的业务,而网络IO部分完全由配置文件去实现。
运维管理者可以通过辅助的管理工具,获得框架运行状态,工作线程,数据流状态,连接状态等信息。辅助运维管理,问题排查。
另外,开发者还可以在完全脱离框架的基础上,利用框架周边工具,压力测试自己的逻辑模块,这样尽量减少上线前所可能出现的问题。

在使用框架前,你可以使用框架提供的小工具,压力测试当前框架的性能指标,作为是否采用的依据。 example下有专门的测试用例,可以提供开发者参考。
设计这个框架的目标不仅仅是一个网络IO的插件接口,而是一整套开发流程,尽量做到减少开发者的付出,规范开发过程(目前SVN上提供整套的框架测试工
具,具体功能请参考先读我.txt) 希望能和大家一步步完善这个体系,真正做到有价值的框架。

我的目标是,你用的爽,就是成功。也希望大家越来越喜欢它。
另外最新代码会发布在SVN上,如果你有SVN,最好从SVN上直接下载,我会定时打版本包放在download里面提供下载。

从0.91起,开始提供版本更新日志

V0.94改进
服务器间连接支持指定本地IP和端口功能。(有些需求远端需要指定本地IP和端口)
添加单位时间连接量和断开量统计功能。
添加单位时间连接量和断开量统计告警功能。
添加告警邮件自动发送功能。
添加新的BuffPacket支持类型,支持String类型的导入导出。
修复Linux PSS关闭时在某些情况下程序不退出的BUG。
修改Reactor主线程为监控线程。
重新设计告警配置文件,并支持邮件告警功能。
添加对PSS的允许最大连接数的远程控制功能。
修复UDP数据发送的一个BUG。
优化对无头数据包解析用例的代码。
添加了数据包头信息代码样例。
修改例子代码支持新的PacketParse功能以及新接口。
添加日志跟踪器工具。
添加了自动添加和关闭指定监听端口功能,支持插件内管理以及管理工具管理。
开放关于链接别名的函数给逻辑插件使用。
添加服务器间连接异常的时候返回远程IP功能。
解决一个HTTP数据包解析造成堆栈崩溃的BUG。
添加定时器插件用例。
优化框架代码,减少不必要的代码,优化流程以及代码顺序。

V0.93改进
支持只有包头不含包体的数据。
添加了Websocket对接协议的PacketParse用例。
添加了Http对接协议的PacketParse用例。
添加了对ACE_DEBUG日志输出文本规格化的支持。
修复了一个ACE_DEBUG死锁的问题。
更新TcpPost用例,添加数据回发完整性判定。
添加了在Linux下对epollet模式的支持。
修复了一些Reactor和Proactor下的BUG。

V0.92改进
1. 优化ConnectHander的代码结构
2. 添加发送超时配置文件
3. 添加了新用例,ftp用例,实现相关了目录浏览,下载和上传(PSS插件以及测试客户端)。
4. 添加如果二级缓冲用例,实现共享内存和数据库的同步(PSS插件以及测试客户端)。
5. 添加了插件间相互调用用例,实现了插件间的通讯((PSS插件以及测试客户端)。
6. 添加Linux下自动设置当前工作目录的功能。
7. 添加了PSS自测插件功能,实现PSS数据包自测用例(PSS插件以及测试客户端)。
8. 更新了PassTCP工具,可以支持二进制和文本的数据包发送。
9. 重写了PSS日志接口,支持输出到屏幕和文件的选择,并支持文本和二进制的记录。
10.添加了Proxy代理服务器数据包转发插件,实现了PSS网关功能(PSS插件以及测试客户端)。
11.添加了新的API,允许插件可以获得工作线程的数量以及当前工作线程的ID。
12.添加了uint64位数据的网络字序和主机字序的转换函数。
13.添加了再Linux下自检当前文件并发数的功能,如果文件并发数小于配置文件设置则框架会自动尝试提升当前文件并发数,如果失败则提示框架启动失败。
14.添加了对core文件的设置,开发者可以通过配置core文件大小来启动当前PSS。
15.添加了发送缓冲区自检功能,当发送字节和对端收到字节不成正比时,按照配置文件的规则回收当前连接。
16.添加了对BACKLOG的设置,可以提升在大并发连接下的连接效率。

V0.91改进
1. 修改了dev_poll下设置并行最大连接数配置文件对应关系。
2. 再次更新PacketParse接口,优化了接口结构,使得开发者更清晰的看到自己要实现代码的地方。
3. 更新插件压力测试工具。支持TCP和UDP压力测试,并会生成测试报告。
4. 更新MakePacket回应包添加CommandID参数,你可以根据不同的连接ID决定处理你的发送组包逻辑(比如加解密的随机算法)
5. 服务器添加了对UDP recv超时的设置
6. 更新了UDP Proactor模式下的UDP设置参数。
7. 添加对IPv4和IPv6的支持。服务器可以使用IPV6的地址,但是前提是OS必须支持IPV6
8. 添加类视图文档,以PDF文档形式提供。
9. 更新插件压测工具,提供多线程压测插件功能。
10. 修改了TCP和TCP服务器间测试用例,实现了透传数据的压测用例。
11. 添加了Linux下结束进程的脚本
12. 添加了时间成本宏,你可以用于你的逻辑中,测试函数执行效能
13. 添加三个Try catch宏用于程序调控。你可以用于你的逻辑中,套在函数里。
14. 添加了服务器发送数据水位标,如果服务器发快客户端收慢,那么会有一个阀值保证正常的连接不受影响。
15. 修改了若干测试出的BUG,具体可以浏览SVN更新日志。
16. 添加了DEBUG模式,在debug下支持输出所有的数据包文件。这些数据包可以变为压测的回放的依据。

提供几个压测数据(TcpPass工具,可从PSS开源工具包中获得)

压测IP:172.21.1.200, 压测端口:10002.(Linux ContOS6 DEBUG)
压测类型:TCP
压测开始时间为: 2013-09-18 11:07:42
压测结束时间为: 2013-09-18 12:06:00
压测线程数:10
创建成功连接数:10
成功发送数据包数:11675202
成功接收数据包数:11675202
连接失败数:0
发送失败数据包数:0
接收失败数据包数:0
连接成功百分比:100.000000%
发送数据包成功百分比:100.000000%
接收数据包成功百分比:100.000000%
=============================================

=============================================
压测IP:172.21.1.68, 压测端口:10002.(Windows7 DEBUG)
压测类型:TCP
压测开始时间为: 2013-09-16 09:55:58
压测结束时间为: 2013-09-16 10:38:09
压测线程数:10
创建成功连接数:10
成功发送数据包数:11514132
成功接收数据包数:11514132
连接失败数:3125
发送失败数据包数:0
接收失败数据包数:0
连接成功百分比:100.000000%
发送数据包成功百分比:100.000000%
接收数据包成功百分比:100.000000%
=============================================

作者: freeeyes

框架贡献者: 凹凸man,w1w,乔戈,Bobo

如需编译帮助,请阅读doc文件夹下的先读我.txt