Skip to content

一个高性能多进程 PHP socket 服务器框架,支持libevent。 High performance Socket server framework for network applications implemented in PHP using libevent

upliu/workerman

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

workerman

workerman 是一个高性能的PHP socket服务框架,开发者可以在这个框架下开发各种网络应用,例如Rpc服务、聊天室、游戏等。 workerman 具有以下特性

  • 支持HHVM,将PHP性能提高9倍左右
  • 多进程/多线程(多线程版本)
  • 支持TCP/UDP
  • 支持多端口监听
  • 支持各种应用层协议
  • 标准输入输出重定向
  • 守护进程化
  • 使用libevent事件轮询库,支持高并发
  • 支持文件更新检测及自动加载
  • 支持服务平滑重启
  • 支持telnet远程控制及监控
  • 支持异常监控及告警
  • 支持长连接
  • 支持以指定用户运行worker进程
  • 支持请求数上限配置

更多请访问www.workerman.net

所需环境

workerman需要PHP版本不低于5.3,只需要安装PHP的Cli即可,无需安装PHP-FPM、nginx、apache workerman不能运行在Windows平台

安装

以ubuntu为例

安装PHP Cli
sudo apt-get install php5-cli

强烈建议安装libevent扩展,以便支持更高的并发量
sudo pecl install libevent

建议安装proctitle扩展(php5.5及以上版本原生支持,无需安装),以便方便查看进程信息
sudo pecl install proctitle

启动停止

以ubuntu为例

启动
sudo ./bin/workermand start

重启启动
sudo ./bin/workermand restart

平滑重启/重新加载配置
sudo ./bin/workermand reload

查看服务状态
sudo ./bin/workermand status

停止
sudo ./bin/workermand stop

配置

  • 配置文件在workerman/conf/目录下
  • 其中workerman/conf/workerman.conf是workerman的主体配置文件,在里面可以设置运行模式、日志目录、pid文件存储位置等配置
  • workerman/conf/conf.d/下每个配置文件对应一个网络应用,同时也对应workerman\workers下的一组worker进程。
  • 以Rpc网络服务应用的配置文件workerman/conf/conf.d/RpcWorker.conf为例
;Rpc网络服务应用配置
;所用的传输层协议及绑定的ip端口
listen = tcp://0.0.0.0:2015
;长连接还是短连接,Rpc服务这里设置成短连接,每次请求后服务器主动断开
persistent_connection = 0
;启动多少worker进程,这里建议设置成cpu核数的整数倍,例如 CPU数*3
start_workers=12
;接收多少请求后退出该进程,重新启动一个新进程,设置成0代表永不重启
max_requests=1000
;以哪个用户运行该worker进程,建议使用权限较低的用户运行worker进程,例如www-data
user=www-data
;socket有数据可读的时候预读长度,一般设置为应用层协议包头的长度,这里设置成尽可能读取更多的数据
preread_length=84000

telnet远程控制及监控

###workerman通过workerman/workers/Monitor.php提供telnet远程控制及监控功能

输入
telnet xxx.xxx.xxx.xxx 2001
输入
status
展示workerman状态
status
---------------------------------------GLOBAL STATUS--------------------------------------------
WorkerMan version:2.0.1
start time:2013-12-26 22:12:48   run 0 days 0 hours
load average: 0, 0, 0
1 users          4 workers       15 processes
worker_name    exit_status     exit_count
FileMonitor    0                0
Monitor        0                0
RpcWorker      0                0
WorkerManAdmin 0                0
---------------------------------------PROCESS STATUS-------------------------------------------
pid     memory      listening        timestamp  worker_name    total_request packet_err thunder_herd client_close send_fail throw_exception suc/total
24139   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
24140   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
24141   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
24142   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
24143   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
24144   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
24145   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
24146   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
24147   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
24148   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
24149   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
24150   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
24151   1.25M   tcp://0.0.0.0:3000   1388067168 WorkerManAdmin 0              0          0            0            0         0               100%

###telnet支持的命令

  • status
  • stop
  • reload
  • kill pid
  • quit

性能测试

###测试环境: 系统:debian 6.0 64位
内存:64G
cpu:Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz (2颗物理cpu,6核心,2线程) Workerman:开启200个Benchark进程 压测脚本:benchmark 业务:发送并返回hello字符串

###普通PHP(版本5.3.10)压测 短链接(每次请求完成后关闭链接,下次请求建立新的链接): 条件: 压测脚本开500个并发线程模拟500个并发用户,每个线程链接Workerman 10W次,每次链接发送1个请求 结果: 吞吐量:1.9W/S , cpu利用率:32%

长链接(每次请求后不关闭链接,下次请求继续复用这个链接):
    条件: 压测脚本开2000个并发线程模拟2000个并发用户,每个线程链接Workerman 1次,每个链接发送10W请求
    结果: 吞吐量:36.7W/S , cpu利用率:69% 

内存:每个进程内存稳定在6444K,无内存泄漏

###HHVM环境压测 短链接(每次请求完成后关闭链接,下次请求建立新的链接): 条件: 压测脚本开1000个并发线程模拟1000个并发用户,每个线程链接Workerman 10W次,每次链接发送1个请求 结果: 吞吐量:3.5W/S , cpu利用率:35%

长链接(每次请求后不关闭链接,下次请求继续复用这个链接):
    条件: 压测脚本开6000个并发线程模拟6000个并发用户,每个线程链接Workerman 1次,每个链接发送10W请求
    结果: 吞吐量:45W/S , cpu利用率:67% 

内存:HHVM环境每个进程内存稳定在46M,无内存泄漏

About

一个高性能多进程 PHP socket 服务器框架,支持libevent。 High performance Socket server framework for network applications implemented in PHP using libevent

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published