php中的socket框架性能分析

在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

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