php中的socket框架性能分析
在php中的socket框架中,Workerman是什么?以下百分網(wǎng)小編整理的關于php中的socket框架性能分析,希望對大家有所幫助,更多信息請關注應屆畢業(yè)生網(wǎng)!
workerman-chatorkerman是一款純PHP開發(fā)的開源高性能的PHP socket 服務器框架。被廣泛的用于手機app、手游服務端、網(wǎng)絡游戲服務器、聊天室服務器、硬件通訊服務器、智能家居、車聯(lián)網(wǎng)、物聯(lián)網(wǎng)等領域的開發(fā)。 支持TCP長連接,支持Websocket、HTTP等協(xié)議,支持自定義協(xié)議;趙orkerman開發(fā)者可以更專注于業(yè)務邏輯開發(fā),不必再為PHP Socket底層開發(fā)而煩惱。
workerman
workerman是一個高性能的PHP socket 服務器框架,workerman基于PHP多進程以及l(fā)ibevent事件輪詢庫,PHP開發(fā)者只要實現(xiàn)一兩個接口,便可以開發(fā)出自己的網(wǎng)絡應用,例如Rpc服務、聊天室服務器、手機游戲服務器等。
workerman的目標是讓PHP開發(fā)者更容易的開發(fā)出基于socket的高性能的應用服務,而不用去了解PHP socket以及PHP多進程細節(jié)。 workerman本身是一個PHP多進程服務器框架,具有PHP進程管理以及socket通信的模塊,所以不依賴php-fpm、nginx或者apache等這些容器便可以獨立運行。
特性
支持HHVM
使用PHP開發(fā)
支持PHP多進程/多線程(多線程版本)
標準輸入輸出重定向
支持毫秒定時器
支持基于事件的異步編程
守護進程化
支持TCP/UDP
支持多端口監(jiān)聽
接口上支持各種應用層協(xié)議
支持libevent事件輪詢庫,支持高并發(fā)
支持服務平滑重啟
支持PHP文件更新檢測及自動加載
支持PHP長連接
支持以指定用戶運行子進程
支持telnet遠程控制
高性能
安裝
下載后解壓即可
服務端開發(fā)示例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">// 創(chuàng)建一個Worker監(jiān)聽2346端口,使用websocket協(xié)議通訊</span>
<span class="variable">$ws_worker </span>= <span class="keyword">new</span> Worker(<span class="string">"websocket://0.0.0.0:2346"</span>);
<span class="comment">// 啟動4個進程對外提供服務</span>
<span class="variable">$ws_worker</span>->count = <span class="number">4</span>;
<span class="comment">// 當收到客戶端發(fā)來的數(shù)據(jù)后返回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">// 向客戶端發(fā)送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、啟動服務類似下圖:
3、查看workerman運行狀態(tài)類似如下界面:
php start.php status
性能
測試環(huán)境:
系統(tǒng):ubuntu 12.04 LTS 64位
內(nèi)存: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(
業(yè)務邏輯
EchoServer
結果
短鏈接(每次請求完成后關閉鏈接,下次請求建立新的鏈接):
條件: 壓測腳本開500個線程,每個線程鏈接Workerman 10W次,每次鏈接發(fā)送1個請求
結果: 吞吐量:3W/S , cpu:60% , 內(nèi)存占用:4*8M = 32M
長鏈接(每次請求后不關閉鏈接,下次請求繼續(xù)復用這個鏈接):
條件: 壓測腳本開1000個線程,每個線程鏈接Workerman 1次,每個鏈接發(fā)送10W請求
結果: 吞吐量:15.6W/S , cpu:68% , 內(nèi)存占用:4*8M = 32M
無流量抖動,無內(nèi)存泄漏,性能非常強悍
【php中的socket框架性能分析】相關文章:
PHP socket的配置及實例10-16
PHP前端開發(fā)中的性能05-25
分析PHP性能調(diào)優(yōu)實戰(zhàn)09-14
php中file-get-contents與curl性能比較分析10-24
php的file-get-contents與curl性能分析09-04
php中引用的用法分析06-22
PHP中Yii框架之表單驗證規(guī)則06-08
PHP框架是什么09-23
PHP的Socket通信之UDP通信實例07-27
php中return的用法實例分析10-27