编程

Workerman 是什么?

778 2023-01-01 00:00:09

Workerman 是一款纯 PHP 开发的开源高性能的 PHP 应用容器。

Workerman 不是重复造轮子,它不是一个 MVC 框架,而是一个更底层更通用的服务框架,你可以用它开发 tcp 代理、梯子代理、做游戏服务器、邮件服务器、ftp 服务器、甚至开发一个 php 版本的 redis、php 版本的数据库、php 版本的 nginx、php 版本的 php-fpm 等等。Workerman可 以说是PHP 领域的一次创新,让开发者彻底摆脱了 PHP 只能做 WEB 的束缚。

实际上 Workerman 类似一个 PHP 版本的 nginx,核心也是多进程+Epoll+非阻塞 IO。Workerman每个进程能维持上万并发连接。由于本身常驻内存,不依赖 Apache、nginx、php-fpm这些容器,拥有超高的性能。同时支持 TCP、UDP、UNIXSOCKET,支持长连接,支持Websocket、HTTP、WSS、HTTPS等通讯协议以及各种自定义协议。拥有定时器、异步 socket 客户端、异步 Redis、异步 Http、异步消息队列等众多高性能组件。

Workerman 的一些应用方向

Workerman 不同于传统 MVC 框架,Workerman 不仅可以用于 Web 开发,同时还有更广阔的应用领域,例如即时通讯类、物联网、游戏、服务治理、其它服务器或者中间件,这无疑大大提高了 PHP 开发者的视野。目前这些领域的 PHP 开发者奇缺,如果想在 PHP 领域有自己的技术优势,不满足于每天的增删改查工作,或者想向架构师方向或者技术大牛的方向发展,Workerman 都是非常值得学习的框架。建议开发者不仅会用,而且能基于 Workerman 开发出属于自己的开源项目,提升技能增加自己的影响力,比如 Beanbun 多进程网络爬虫框架就是一个很好的例子,刚刚上线不久就获得众多好评。

Workerman 的一些应用方向如下:

1、即时通讯类
例如网页即时聊天、即时消息推送、微信小程序、手机app消息推送、PC软件消息推送等等
[示例 workerman-chat 聊天室web 消息推送小蝌蚪聊天室]

2、物联网类
例如Workerman与打印机通讯、与单片机通讯、智能手环、智能家居、共享单车等等。
[客户案例如 易联云、易泊时代等]

3、游戏服务器类
例如棋牌游戏、MMORPG 游戏等等。[示例 browserquest-php]

4、HTTP 服务
例如 写高性能 HTTP 接口、高性能网站。如果想要做 HTTP 相关的服务或者站点强烈推荐 webman

5、SOA 服务化
利用 Workerman 将现有业务不同功能单元封装起来,以服务的形式对外提供统一的接口,达到系统松耦合、易维护、高可用、易伸缩。[示例 workerman-json-rpcworkerman-thrift]

6、其它服务器软件
例如 GatewayWorkerPHPSocket.IOhttp 代理sock5 代理分布式通讯组件分布式变量共享组件消息队列、DNS 服务器、WebServer、CDN服务器、FTP服务器等等

7、组件
例如异步 redis异步 http 客户端物联网 mqtt 客户端,消息队列 workerman/redis-queueworkerman/stompworkerman/rabbitmq文件监控组件,还有很多第三方开发的组件框架等等

显然传统的 mvc 框架很难实现以上的功能,所以也就是 workerman 诞生的原因。

Workerman 理念

极简、稳定、高性能、分布式。

极简

小即是美,Workerman 内核极简,仅有几个 php 文件并且只暴露几个接口,学习起来非常简单。所有其它功能通过组件的方式扩展。

Workerman 拥有完善的文档+权威的主页+活跃的社区+数个千人 QQ 群+众多的高性能组件 + N 多的例子,这一切都让开发者使用起来更得心应手。

稳定

Workerman 已经开源数年,被很多上市公司大规模使用,超级稳定。有些服务 2 年多没重启过仍然在飞速运行。没有 coredump、没有内存泄漏、没有 bug。

高性能

Workerman 因为常驻内存,本身不依赖 apache/nginx/php-fpm,没有容器到 PHP 的通讯开销,没有每个请求初始化一切又销毁一切的开销,具有超高的性能,比起传统的MVC框架,性能要高数十倍,PHP7 下通过 ab 压力测试 QPS 甚至高于单独的 nginx。

分布式

现在早已经不是单枪匹马的时代了,单台服务器性能再强悍也有极限,分布式多服务器部署才是王道。Workerman 直接提供了一套长连接分布式通讯方案 GatewayWorker 框架,加服务器只需要简单配置下然后启动即可,业务代码零更改,系统承载能力成倍增加。如果你是开发 TCP 长连接应用,建议直接用 GatewayWorker,它是对 Workerman 的一个包装,针对长连接应用提供了更丰富的接口以及强悍的分布式处理能力。