當前位置:才華齋>計算機>php語言>

php中的socket框架效能分析

php語言 閱讀(2.54W)

在php中的socket框架中,Workerman是什麼?以下本站小編整理的關於php中的socket框架效能分析,希望對大家有所幫助,更多資訊請關注應屆畢業生網!

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、新建檔案

<code><span class="preprocessor">&lt;?php</span><span class="keyword">use</span> WorkermanWorker;<span class="keyword">require_once</span> <span class="string">'./Workerman/'</span>;<span class="comment">// 建立一個Worker監聽2346埠,使用websocket協議通訊</span><span class="variable">$ws_worker </span>= <span class="keyword">new</span> Worker(<span class="string">"websocket://"</span>);<span class="comment">// 啟動4個程序對外提供服務</span><span class="variable">$ws_worker</span>-&gt;count = <span class="number">4</span>;<span class="comment">// 當收到客戶端發來的資料後返回hello $data給客戶端</span><span class="variable">$ws_worker</span>-&gt;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>-&gt;send(<span class="string">'hello '</span> . <span class="variable">$data</span>);};<span class="comment">// 執行</span>Worker::runAll()

2、啟動服務類似下圖:

3、檢視workerman執行狀態類似如下介面:
tatus

效能

測試環境

系統:ubuntu 12.04 LTS 64位

記憶體:8G

cpu:Intel® Core™ i3-3220 CPU @ 3.30GHz × 4

<span class="preprocessor">&lt;?php</span><span class="keyword">use</span> WorkermanWorker;<span class="variable">$worker </span>= <span class="keyword">new</span> Worker(<span class="string">'tcp://'</span>);<span class="variable">$worker</span>-&gt;count=<span class="number">3</span>;<span class="variable">$worker</span>-&gt;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>-&gt;send(<span class="string">"HTTP/1.1 200 OKrnConnection: keep-alivernServer: workerman1.1.4rnrnhello"</span>); <span class="comment">// 短連線</span> <span class="comment">//$connection-&gt;close("HTTP/1.1 200 OKrnServer: workerman1.1.4rnrnhello");</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

無流量抖動,無記憶體洩漏,效能非常強悍