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

  無流量抖動,無內存泄漏,性能非常強悍


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM