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

  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

  无流量抖动,无内存泄漏,性能很是强悍

相关文章
相关标签/搜索