Workerman 是一款开源高性能异步PHP socket即时通讯框架。支持高并发,超高稳定性,被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。
Workerman 是一款开源高性能异步 PHP socket 即时通讯框架。支持高并发,超高稳定性,被广泛的用于手机 app、移动通讯,微信小程序,手游服务端、网络游戏、PHP 聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。
Workerman 支持 TCP 长连接,支持 Websocket、HTTP 等协议,支持自定义协议。拥有异步 Mysql、异步 Redis、异步 Http、MQTT 物联网客户端、异步消息队列等众多高性能组件。
workerman 的目标是让 PHP 开发者更容易的开发出基于 socket 的高性能的应用服务,而不用去了解 PHP socket 以及 PHP 多进程细节。 workerman 本身是一个 PHP 多进程服务器框架,具有 PHP 进程管理以及 socket 通信的模块,所以不依赖 php-fpm、nginx 或者 apache 等这些容器便可以独立运行。
Workerman 支持的特性
纯 PHP 开发,多进程支持,支持 php7,支持 hhvm支持 TCP/UDP,单机可支持数百万以上 TCP 长连接支持分布式部署,集群能支持数百万甚至更高的并发 TCP 连接支持 libevent 事件触发网络库支持热更新及服务器平滑重启拥有异步 Mysql、Redis、Dns 等众多高性能组件
为什么 workerman 拥有卓越的性能
避免读取磁盘和反复编译
workerman 运行过程中,单个进程生命周期内只要 PHP 文件被载入编译过一次,便会常驻内存,不会再去从磁盘读取或者再去编译。 workerman 省去了重复的请求初始化、创建执行环境、词法解析、语法解析、编译生成 opcode 以及请求关闭等诸多耗时的步骤。 实际上 workerman 运行起来后便几乎没有磁盘 IO 及 PHP 文件编译开销,剩下的只是简单的计算过程,这使得 workerman 运行飞快。
数据或者资源可以全局共享
workerman 中多个请求是可以共享数据或者资源的,当前请求产生的全局变量或者类的静态成员在下一次请求中仍然有效。 这对于减少开销,提高运行效率非常有用。例如业务只要初始化一次数据库连接,那么全局都可以共享这个连接,这实现了真正意义上的数据库长连接。 从而不必每次用户请求都去创建新的连接,避免了连接时三次握手、连接后权限验证以及断开连接时四次挥手等耗时的交互过程。不仅数据库,像 redis、 memcache 等同样有效。少了这些开销和网络交互,使得 workerman 运行更快。
没有多余的网络开销
传统 PHP 应用程序需要借助 apache、nginx 等容器才能对外提供网络服务,这就导致多了一层 apache、nginx 等容器到 PHP 进程的数据传输开销。 并且由于运行了 apache 或者 nginx 容器,这将进一步消耗服务器的资源。 workerman 便没有这部分开销,这是由于 workerman 自身便是一个服务器容器具有 PHP 进程管理以及网络通讯功能, 完全不依赖于 apache、nginx、php-fpm 等这些容器便可以独立运行,所以性能更高。
进程模型简单
workerman 是多进程(也有多线程版本)的,可以充分利用服务器多核资源。并且 workerman 具有简单的进程模型,主进程只负责监控子进程,而每个子进程独自接受维护客户端的连接,独自读取连接上发来的数据,独自处理。 子进程间默认没有任何数据通讯,主进程和子进程之间只有一次信号通讯。简单的进程通讯模型使得 workerman 相比其它复杂的进程模型的软件更高效。