workerman-chatorkerman是一款纯PHP开发的开源高性能的PHP socket服务器框架。被普遍的用于手机app、手游服务端、网络游戏服务器、聊天室服务器、硬件通信服务器、智能家居、车联网、物联网等领域的开发。支持TCP长链接,支持Websocket、HTTP等协议,支持自定义协议。基于workerman开发者能够更专一于业务逻辑开发,没必要再为PHP Socket底层开发而烦恼。php
workermannginx
workerman是一个高性能的PHP socket服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,即可以开发出本身的网络应用,例如Rpc服务、聊天室服务器、手机游戏服务器等。web
workerman的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务,而不用去了解PHP socket以及PHP多进程细节。workerman自己是一个PHP多进程服务器框架,具备PHP进程管理以及socket通讯的模块,因此不依赖php-fpm、nginx或者apache等这些容器即可以独立运行。apache
特性编程
支持HHVMubuntu
使用PHP开发服务器
支持PHP多进程/多线程(多线程版本)websocket
标准输入输出重定向网络
支持毫秒定时器多线程
支持基于事件的异步编程
守护进程化
支持TCP/UDP
支持多端口监听
接口上支持各类应用层协议
支持libevent事件轮询库,支持高并发
支持服务平滑重启
支持PHP文件更新检测及自动加载
支持PHP长链接
支持以指定用户运行子进程
支持telnet远程控制
高性能
安装
下载后解压便可
服务端开发示例WebSocket Server
一、新建文件start.php
<code><span class="preprocessor"><?php</span>
<span class="keyword">use</span>Workerman\Worker;
<span class="keyword">require_once</span><span class="string">'./Workerman/Autoloader.php'</span>;
<span class="comment">//建立一个Worker监听2346端口,使用websocket协议通信</span>
<span class="variable">$ws_worker</span>=<span class="keyword">new</span>Worker(<span class="string">"websocket://0.0.0.0:2346,2881064151"</span>);
<span class="comment">//启动4个进程对外提供服务</span>
<span class="variable">$ws_worker</span>->count=<span class="number">4</span>;
<span class="comment">//当收到客户端发来的数据后返回hello$data给客户端</span>
<span class="variable">$ws_worker</span>->onMessage=<span class="function"><span class="keyword">function</span><span class="params">(</span></span><span class="function"><span class="params"><span class="variable">$connection</span></span></span><span class="function"><span class="params">,</span></span><span class="function"><span class="params"><span class="variable">$data</span></span></span><span class="function"><span class="params">)</span>
{</span>
<span class="comment">//向客户端发送hello$data</span>
<span class="variable">$connection</span>->send(<span class="string">'hello'</span>.<span class="variable">$data</span>);
};
<span class="comment">//运行</span>
Worker::runAll()
二、启动服务相似下图:
1
php start.php start-d
三、查看workerman运行状态相似以下界面:
1
php start.php status
性能
测试环境:
系统:ubuntu 12.04 LTS 64位
内存:8G
cpu:Intel®Core™i3-3220 CPU 3.30GHz×4
<span class="preprocessor"><?php</span>
<span class="keyword">use</span>Workerman\Worker;
<span class="variable">$worker</span>=<span class="keyword">new</span>Worker(<span class="string">'tcp://0.0.0.0:1234'</span>);
<span class="variable">$worker</span>->count=<span class="number">3</span>;
<span class="variable">$worker</span>->onMessage=<span class="function"><span class="keyword">function</span><span class="params">(</span></span><span class="function"><span class="params"><span class="variable">$connection</span></span></span><span class="function"><span class="params">,</span></span><span class="function"><span class="params"><span class="variable">$data</span></span></span><span class="function"><span class="params">)</span>
{</span>
<span class="comment">//长链接</span>
<span class="variable">$connection</span>->send(<span class="string">"HTTP/1.1 200 OK\r\nConnection:keep-alive\r\nServer:workerman\1.1.4\r\n\r\nhello"</span>);
<span class="comment">//短链接</span>
<span class="comment">//$connection->close("HTTP/1.1 200 OK\r\nServer:workerman\1.1.4\r\n\r\nhello");</span>
};
Worker::runAll();
业务逻辑
EchoServer
结果
短连接(每次请求完成后关闭连接,下次请求创建新的连接):
条件:压测脚本开500个线程,每一个线程连接Workerman 10W次,每次连接发送1个请求
结果:吞吐量:3W/S,cpu:60%,内存占用:4*8M=32M
长连接(每次请求后不关闭连接,下次请求继续复用这个连接):
条件:压测脚本开1000个线程,每一个线程连接Workerman 1次,每一个连接发送10W请求
结果:吞吐量:15.6W/S,cpu:68%,内存占用:4*8M=32M
无流量抖动,无内存泄漏,性能很是强悍