Workerman 的特性
1、纯 PHP 开发
使用 Workerman 开发的应用程序不依赖 php-fpm、apache、nginx 这些容器就可以独立运行。 这使得 PHP 开发者开发、部署、调试应用程序非常方便。
2、支持 PHP 多进程
为了充分发挥服务器多 CPU 的性能,Workerman 默认支持多进程多任务。Workerman 开启一个主进程和多个子进程对外提供服务, 主进程负责监控子进程,子进程独自监听网络连接并接收发送及处理数据,由于进程模型简单,使得 Workerman 更加稳定,更加高效。
3、支持 TCP、UDP
Workerman 支持 TCP 和 UDP 两种传输层协议,只需要更改一个属性便可以更换传输层协议,业务代码无需改动。
4、支持长连接
很多时候需要 PHP 应用程序要与客户端保持长连接,比如聊天室、游戏等,但是传统的 PHP 容器(apache、nginx、php-fpm)很难做到这一点。 使用 Workerman,只要服务端业务不主动调用关闭连接接口,便可以使用 PHP 长连接。Workerman 单个进程可以支持上万的并发连接,多进程则支持数十万的甚至百万并发连接。
5、支持各种应用层协议
Workerman 接口上支持各种应用层协议,包括自定义协议。在 Workerman 中更换协议同样非常简单,同样只是配置一个字段,协议自动切换,业务代码零改动,甚至可以开启多个不同协议的端口,满足不同的客户端需求。
6、支持高并发
Workerman 支持 Libevent 事件轮询库(需要安装 event 扩展), 使用 Event 在长连接高并发时性能非常卓越,如果没有安装 Event 扩展则使用 PHP 内置的 Select 相关系统调用,性能也同样非常强悍。
7、支持服务平滑重启
当需要重启服务时(例如发布版本),我们不希望正在处理用户请求的进程被立刻终止,更不希望重启的那一刻导致客户端通讯失败。Workerman 提供了平滑重启功能,能够保障服务平滑升级,不影响客户端的使用。
8、支持文件更新检测及自动加载
在开发过程中,我们希望在我们改动代码后能够立刻生效,以便查看结果。Workerman 提供了 FileMonitor 文件监控组件,只要文件有更新,Workerman 会自动运行 reload,以便加载新的文件,使之生效。
9、支持以指定用户运行子进程
因为子进程是实际处理用户请求的进程,为了安全考虑,子进程不能有太高的权限,所以 Workerman 支持设置子运行进程运行的用户,使你的服务器更加安全。
10、支持对象或者资源永久保持
Workerman 在运行过程中只会载入解析一次 PHP 文件,然后便常驻内存,这使得类及函数声明、PHP 执行环境、符号表等不会重复创建销毁,这与 Web 容器下运行的 PHP 机制是完全不同的。在 Workerman 中,一个进程生命周期内静态成员或者全局变量在不主动销毁的情况下是永久保持的,也就是将对象或者连接等资源放到全局变量或者类静态成员中则当前进程的整个生命周期内的所有请求都可以复用。例如只要单个进程内初始化一次数据库连接,则以后这个进程的所有请求都可以复用这个数据库连接,避免了频繁连接数据库过程中 TCP 三次握手、 数据库权限验证、断开连接时 TCP 四次握手的过程,极大的提高了应用程序效率。
11、高性能
由于 php 文件从磁盘读取解析一次后便会常驻内存,下次使用时直接使用内存中的 opcode, 极大的减少了磁盘 IO 及 PHP 中请求初始化、创建执行环境、词法解析、语法解析、编译 opcode、请求关闭等诸多耗时过程, 并且不依赖 nginx、apache 等容器,少了 nginx 等容器与 PHP 通信的开销,最主要的是资源可以永久保持,不必每次初始化数据库连接等等, 所以使用 Workerman 开发应用程序,性能非常高。
12、支持 HHVM
支持在 HHVM 虚拟机上运行,可成倍提升 PHP 性能。尤其是在 cpu 密集运算业务中,性能非常优异。通过实际压力测试对比,在没有负载业务的情况下,Workerman 在 HHVM 下运行比在 Zend PHP5.6 运行网络吞吐量提高了 30-80% 左右