什么是Workerman
简单的说Workerman是一个纯php开发的服务器。
workerman的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务,而不用去了解PHP socket以及PHP多进程细节。 workerman本身是一个PHP多进程服务器,类似nginx+php-fpm的结合体,但性能远高于nginx+php-fpm,并且接口上支持各种协议,而且支持php长连接。你不需要安装nginx、apache、php-fpm等,只需要安装PHP>=5.3即可直接运行(非Win系统)workerman。目前workerman已经被应用与RPC服务器、聊天室、游戏后台服务器等应用。
目前workerman已经被很多公司使用,其中不乏日营业额过亿的电子商务公司用于订单系统的开发,以及游戏公司用于游戏后台的开发。
特性
- 使用PHP开发,与PHP无缝接合
- 支持PHP多进程
- 支持TCP/UDP
- 接口上支持各种应用层协议
- 支持libevent事件轮询库,支持高并发
- 支持服务平滑重启
- 支持PHP文件更新检测及自动加载
- 支持PHP长连接
- 支持以指定用户运行子进程
- 支持telnet远程控制
- 支持进程监控及短信告警
- 集成业务统计模块,接口调用量、成功率、耗时、错误日志等
- 高性能,普通PC机器压测长连接9.7W/短连接3W的并发请求
环境
PHP>=5.3 非Win系统
安装
下载后解压即可
启动停止
启动:./bin/workermand start
停止:./bin/workermand stop
重启:./bin/workermand restart
平滑重启:./bin/workermand reload
查看状态:./bin/workermand status
启动界面如图:
查看状态 如图:
服务端开发示例EchoServer
1、新建文件workers/EchoWorker.php
<?php
require_once WORKERMAN_ROOT_DIR . 'man/Core/SocketWorker.php';
class EchoWorker extends Man\Core\SocketWorker
{
/**
* 确定包是否完整 return 0:完整 return X:还有X字节没有接收完
*/
public function dealInput($buffer)
{
return 0;
}
/**
* 处理业务,当客户端数据接收完毕后触发(这里只是将客户端发来的字符串直接会写到客户端)
*/
public function dealProcess($buffer)
{
return $this->sendToClient($buffer);
}
}
2、新建配置conf/conf.d/EchoWorker.conf
;监听ip及端口
listen = tcp://0.0.0.0:55555
;是否是长连接
persistent_connection = 0
;启动多少进程
start_workers=4
;以哪个用户运行这个worker进程
user=www-data
;预读长度
preread_length=8192
3、启动服务
./bin/workerman start
4、测试
telnet 115.28.44.100 55555
输入任意字符串回车
服务端会将字符串原封不动的返回
结果如下
telnet 115.28.44.100 55555
Trying 115.28.44.100...
Connected to 115.28.44.100.
Escape character is '^]'.
hello world
hello world
Connection closed by foreign host.
性能
测试环境:
系统:ubuntu 12.04 LTS 64位
内存:8G
cpu:Intel® Core™ i3-3220 CPU @ 3.30GHz × 4
业务逻辑
EchoServer
结果
短链接(每次请求完成后关闭链接,下次请求建立新的链接):
条件: 压测脚本开500个线程,每个线程链接Workerman 10W次,每次链接发送1个请求
结果: 吞吐量:3W/S , cpu:60% , 内存占用:4*8M = 32M
长链接(每次请求后不关闭链接,下次请求继续复用这个链接):
条件: 压测脚本开1000个线程,每个线程链接Workerman 1次,每个链接发送10W请求
结果: 吞吐量:9.7W/S , cpu:68% , 内存占用:4*8M = 32M
无流量抖动,无内存泄漏,性能非常强悍
Thrift RPC远程调用框架
分布式统计系统
Json Rpc远程调用框架
值得一提的是,主页
高性能PHP应用容器workerman程序也是基于workerman框架开发的,直接用workerman运行,没装Apache、Nginx、php-fpm、Mysql,只装了PHP。
相信workerman以后的一个重量级应用便是基于PHP的游戏后台开发,包括手机游戏后台和网页游戏后台。
最近正在整理php游戏开发框架,已经有模型了甚至有人开始使用了,后面也会放出代码。