PSS

跨平台网络服务器框架
授权协议 GPLv3
开发语言 C/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


 相关资料
  • 直到最近,我还认为WCF服务仅限于.NET(即只能从.NET应用程序访问),因为它们公开了一个.NET对象,使用者在该对象上调用方法(然后当然在服务器上运行)。 然后我读到WCF服务是跨平台的;即可以从多种平台访问,而不仅仅是.NET。

  • Twisted Twisted 是一个事件驱动的网络引擎。他可以被用来构建多种网络协议的应用程序,包括:HTTP 服务器和客户端;使用 SMTP、POP3、IMAP 或者 SSH 协议测应用程序和 IM (即时消息)等应用 更多。 PyZMQ PyZMQ 是 ZeroMQ 的 Python 绑定。ZeroMQ 是一个高性能的异步消息库,它的一个很大的优势在于其可以被用作一个消息队列而不需要消息代理

  • 多平台支持 Mpx支持在多个小程序平台中进行增强,目前支持的小程序平台包括微信,支付宝,百度,qq和头条,不过自2.0版本后,Mpx支持了以微信增强语法为base的跨平台输出,实现了一套业务源码在多端输出运行的能力,大大提升了多小程序平台业务的开发效率,详情可以查看template增强特性 不同平台上的模板增强指令按照平台的指令风格进行设计,文档和代码示例为了方便统一采用微信小程序下的书写方式。

  • 当使用uWSGI网络服务器搭配geventd的时候,Socket.IO服务器的时候,可以利用uWSGI原生的WebSocket支持。 一 个配置和运用uWSGI服务器完整的解释超出了本文的论述范围。uWSGI服务器确实是一个比较复杂的,它提供了大量而又详尽的设置选项。它必须使用 Websocket和SSL编译才能支持WebSocket传输。作为介绍,下面的命令启动了一个uWSGI服务器作为范例,这

  • 网络服务提供弹性公网IP、NAT网关、DNS解析等功能。 弹性公网IP 弹性公网IP(Elastic IP)是一种NAT IP,通过与虚拟机绑定,将弹性公网IP与虚拟机的私有地址进行NAT映射,实现虚拟机与公网之间的通信。 NAT网关 NAT网关能够为公有云VPC网络中虚拟机提供IP地址转换功能,使虚拟机可以访问外网或提供互联网服务。 DNS解析 DNS解析用于将简单好记的域名解析为计算机用于通信

  • 本文向大家介绍JavaScript跨平台的开源框架NativeScript,包括了JavaScript跨平台的开源框架NativeScript的使用技巧和注意事项,需要的朋友参考一下 NativeScript是一款使用JavaScript语言来构建跨平台原生移动应用的开源框架,支持iOS、Android和Windows Phone。且NativeScript的使用没有过多繁杂的要求,只需使用自己已

  • 问题内容: 我想用纯Java实现我自己的Web服务器,该Web服务器应仅支持静态资源(即html,js,css,图片,电影等)。 您能推荐有关如何实现这种事情的教程或文章吗?我应该使用几个进程或线程池,还是应该考虑像NodeJS这样的面向循环事件的对象? 我知道有一些免费的网络服务器可以完全满足我的需求,但我想以此为自己的锻炼。 问题答案: 我建议您熟悉HTTP请求格式http://datatra

  • Reorganized by Murray Stokely. 30.1. 概要 本章将覆盖某些在 UNIX® 系统上常用的网络服务。话题将会涉及如何安装、配置、测试和维护多种不同类型的网络服务。本章节中将提供大量配置文件的样例,期望能够对您有所裨益。 在读完本章之后,您将会知道: 如何管理 inetd。 如何设置运行一个网络文件系统。 如何配置一个网络信息服务器以共享用户帐号。 如何通过DHCP自