workerman是一个高性能的PHP socket服务器框架

  workerman-chatorkerman是一款纯PHP开发的开源高性能的PHP socket服务器框架。被广泛的用于手机app、手游服务端、网络游戏服务器、聊天室服务器、硬件通讯服务器、智能家居、车联网、物联网等领域的开发。支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。基于workerman开发者可以更专注于业务逻辑开发,不必再为PHP Socket底层开发而烦恼。

  workerman

  workerman是一个高性能的PHP socket服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用,例如Rpc服务、聊天室服务器、手机游戏服务器等。

  workerman的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务,而不用去了解PHP socket以及PHP多进程细节。workerman本身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通信的模块,所以不依赖php-fpm、nginx或者apache等这些容器便可以独立运行。

  特性

  支持HHVM

  使用PHP开发

  支持PHP多进程/多线程(多线程版本)

  标准输入输出重定向

  支持毫秒定时器

  支持基于事件的异步编程

  守护进程化

  支持TCP/UDP

  支持多端口监听

  接口上支持各种应用层协议

  支持libevent事件轮询库,支持高并发

  支持服务平滑重启

  支持PHP文件更新检测及自动加载

  支持PHP长连接

  支持以指定用户运行子进程

  支持telnet远程控制

  高性能

  安装

  下载后解压即可

  服务端开发示例WebSocket Server

  1、新建文件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()

  2、启动服务类似下图:

  1

  php start.php start-d

  3、查看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

  无流量抖动,无内存泄漏,性能非常强悍