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

  無流量抖動,無內存泄漏,性能很是強悍

相關文章
相關標籤/搜索