摘要:概述這是關(guān)于入門(mén)學(xué)習(xí)的第十篇文章壓測(cè)性能。測(cè)試機(jī)上安裝的虛擬機(jī)系統(tǒng)內(nèi)存數(shù)量核數(shù)數(shù)量大小代碼壓測(cè)腳本并發(fā)量請(qǐng)求量壓測(cè)結(jié)果第次第次第次以上是壓測(cè)結(jié)果,供參考。小結(jié)通過(guò)這個(gè)壓測(cè)結(jié)果,表明的執(zhí)行效率是杠杠的當(dāng)然還有一些參數(shù)是可以調(diào)優(yōu)的,比如等。
概述
這是關(guān)于 Swoole 入門(mén)學(xué)習(xí)的第十篇文章:壓測(cè) swoole_websocket_server 性能。
第九篇:Swoole Redis 連接池的實(shí)現(xiàn)
第八篇:Swoole MySQL 的實(shí)現(xiàn)
第七篇:Swoole RPC 的實(shí)現(xiàn)
第六篇:Swoole 整合成一個(gè)小框架
第五篇:Swoole 多協(xié)議 多端口 的應(yīng)用
第四篇:Swoole HTTP 的應(yīng)用
第三篇:Swoole WebSocket 的應(yīng)用
第二篇:Swoole Task 的應(yīng)用
第一篇:Swoole Timer 的應(yīng)用
收到讀者提問(wèn) “使用 Swoole 開(kāi)發(fā)的群聊功能,想知道并發(fā)情況,也就是想壓測(cè)下 QPS,一直未找到方法 ...”
對(duì) swoole_http_server 壓測(cè),咱們可以使用 Apache 的 ab 命令。
對(duì) swoole_websocket_server 壓測(cè),使用 ab 命令是不能壓測(cè)的,我從網(wǎng)上一直也沒(méi)找到合適的方法,看官方提供的代碼 benchmark/async.php 中,使用的異步模塊 swoolehttpclient 方法進(jìn)行壓測(cè)的,但在 Swoole 4.3 版本就移除了異步模塊,讓使用 Coroutine 協(xié)程模塊。
在本地我用 Coroutine 協(xié)程實(shí)現(xiàn)了一下, 測(cè)的差不多的時(shí)候,一直不確定是否正確,就在 segmentfault 發(fā)了個(gè)提問(wèn),沒(méi)想到韓老師回答了,"如果的如果"老師也回答了,非常感謝兩位老師的答案,然后整理出文章分享給大家。
測(cè)試機(jī)Mac 上安裝的 Parallels Desktop 虛擬機(jī)
系統(tǒng):Ubuntu 16.04.3 LTS
內(nèi)存:
數(shù)量:1
核數(shù):2
CPU:
數(shù)量:1
大小:2G
Server 代碼</>復(fù)制代碼
serv = new SwooleWebSocketServer("0.0.0.0", 9501);
$this->serv->set([
"task_worker_num" => 10,
"enable_coroutine" => true,
"task_enable_coroutine" => true
]);
$this->serv->on("open", function ($serv, $request) {});
$this->serv->on("message", function ($serv, $frame) {
$serv->task($frame->data);
});
$this->serv->on("task", function ($serv, $task) {
foreach ($serv->connections as $fd) {
$connectionInfo = $serv->connection_info($fd);
if (isset($connectionInfo["websocket_status"]) && intval($connectionInfo["websocket_status"]) == 3) {
$serv->push($fd, $task->data);
}
}
});
$this->serv->on("finish", function ($serv, $task_id, $data) {});
$this->serv->on("close", function ($serv, $fd) {});
$this->serv->start();
}
}
$server = new Server();
壓測(cè)腳本
</>復(fù)制代碼
class Test
{
protected $concurrency; //并發(fā)量
protected $request; //請(qǐng)求量
protected $requested = 0;
protected $start_time;
function __construct()
{
$this->concurrency = 100;
$this->request = 10000;
}
protected function webSocket()
{
go(function () {
for ($c = 1; $c <= $this->concurrency; $c++ ) {
$cli = new SwooleCoroutineHttpClient("127.0.0.1", 9501);
$cli->set(["websocket_mask" => false]);
$ret = $cli->upgrade("/");
if ($ret) {
$i = $this->request / $this->concurrency;
while ($i >= 1) {
$this->push($cli);
$cli->recv();
$i--;
}
}
}
$this->finish();
});
}
protected function push($cli)
{
$ret = $cli->push("Hello World");
if ($ret === true) {
$this->requested ++ ;
}
}
protected function finish()
{
$cost_time = round(microtime(true) - $this->start_time, 4);
echo "Concurrency:".$this->concurrency.PHP_EOL;
echo "Request num:".$this->request.PHP_EOL;
echo "Success num:".$this->requested.PHP_EOL;
echo "Total time:".$cost_time.PHP_EOL;
echo "Request per second:" . intval($this->request / $cost_time).PHP_EOL;
}
public function run()
{
$this->start_time = microtime(true);
$this->webSocket();
}
}
$test = new Test();
$test->run();
壓測(cè)結(jié)果
</>復(fù)制代碼
第 1 次:
Concurrency:100
Request num:10000
Success num:10000
Total time:0.846
Request per second:11820
第 2 次:
Concurrency:100
Request num:10000
Success num:10000
Total time:0.9097
Request per second:10992
第 3 次:
Concurrency:100
Request num:10000
Success num:10000
Total time:0.903
Request per second:11074
以上是壓測(cè)結(jié)果,供參考。
小結(jié)通過(guò)這個(gè)壓測(cè)結(jié)果,表明 Swoole 的執(zhí)行效率是杠杠的!
當(dāng)然還有一些參數(shù)是可以調(diào)優(yōu)的,比如:worker_num、max_request、task_worker_num 等。
在真實(shí)的業(yè)務(wù)場(chǎng)景中,肯定會(huì)有邏輯處理,也會(huì)使用到 MySQL、Redis。
那么問(wèn)題來(lái)了,前兩篇文章已經(jīng)分享了,Swoole Redis 連接池、Swoole MySQL 連接池,感興趣的同學(xué),可以使用上兩種連接池,然后再進(jìn)行壓測(cè)。
不知不覺(jué),Swoole 入門(mén)文章已經(jīng)寫(xiě)了 10 篇了,非常感謝大家的捧場(chǎng),真心希望能夠?qū)?Swoole 入門(mén)學(xué)習(xí)的同學(xué),有點(diǎn)幫助。
推薦閱讀系統(tǒng)的講解 - SSO 單點(diǎn)登錄
系統(tǒng)的講解 - PHP WEB 安全防御
系統(tǒng)的講解 - PHP 緩存技術(shù)
系統(tǒng)的講解 - PHP 接口簽名驗(yàn)證
系統(tǒng)的講解 - PHP 浮點(diǎn)數(shù)高精度運(yùn)算
本文歡迎轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)請(qǐng)注明作者和出處,謝謝!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/31666.html
摘要:是一個(gè)請(qǐng)求對(duì)象,包含了客戶端發(fā)來(lái)的握手請(qǐng)求信息事件函數(shù)中可以調(diào)用向客戶端發(fā)送數(shù)據(jù)或者調(diào)用關(guān)閉連接事件回調(diào)是可選的當(dāng)服務(wù)器收到來(lái)自客戶端的數(shù)據(jù)幀時(shí)會(huì)回調(diào)此函數(shù)。 前言:了解概念之后就應(yīng)該練練手啦,不然就是巨嬰 有收獲的話請(qǐng)加顆小星星,沒(méi)有收獲的話可以 反對(duì) 沒(méi)有幫助 舉報(bào)三連 代碼倉(cāng)庫(kù) 實(shí)戰(zhàn)swoole【聊天室】 在線體驗(yàn) 準(zhǔn)備工作 需要先看初識(shí)swoole【上】,了解基本的服務(wù)端...
摘要:隨著微信的普及,掃碼登錄方式越來(lái)越被現(xiàn)在的應(yīng)用所使用。這里基于微信公眾平臺(tái)的帶參數(shù)臨時(shí)二維碼,并且結(jié)合的服務(wù)實(shí)現(xiàn)掃碼登錄。對(duì)于用戶掃臨時(shí)的二維碼,微信會(huì)觸發(fā)相應(yīng)的回調(diào)事件,我們需要在該回調(diào)事件中處理用戶的掃碼行為。 隨著微信的普及,掃碼登錄方式越來(lái)越被現(xiàn)在的應(yīng)用所使用。它因?yàn)椴挥萌ビ涀∶艽a,只要有微信號(hào)即可方便快捷登錄。微信的開(kāi)放平臺(tái)原生就有支持掃碼登錄的功能,不過(guò)大部分人還是在用公眾...
摘要:摘要阿里云性能測(cè)試是卓越的性能測(cè)試平臺(tái),具備強(qiáng)大的分布式壓測(cè)能力,可模擬海量用戶的真實(shí)業(yè)務(wù)場(chǎng)景,讓所有性能問(wèn)題無(wú)所遁形。近日,宣布推出了基于阿里雙全鏈路壓測(cè)平臺(tái)的鉑金版。 摘要: 阿里云性能測(cè)試(Performance Testing Service)是卓越的SaaS性能測(cè)試平臺(tái),具備強(qiáng)大的分布式壓測(cè)能力,可模擬海量用戶的真實(shí)業(yè)務(wù)場(chǎng)景,讓所有性能問(wèn)題無(wú)所遁形。近日,PTS宣布推出了基于...
摘要:摘要阿里云性能測(cè)試是卓越的性能測(cè)試平臺(tái),具備強(qiáng)大的分布式壓測(cè)能力,可模擬海量用戶的真實(shí)業(yè)務(wù)場(chǎng)景,讓所有性能問(wèn)題無(wú)所遁形。近日,宣布推出了基于阿里雙全鏈路壓測(cè)平臺(tái)的鉑金版。 摘要: 阿里云性能測(cè)試(Performance Testing Service)是卓越的SaaS性能測(cè)試平臺(tái),具備強(qiáng)大的分布式壓測(cè)能力,可模擬海量用戶的真實(shí)業(yè)務(wù)場(chǎng)景,讓所有性能問(wèn)題無(wú)所遁形。近日,PTS宣布推出了基于...
閱讀 1845·2021-09-14 18:03
閱讀 2277·2019-08-30 15:48
閱讀 1133·2019-08-30 14:09
閱讀 518·2019-08-30 12:55
閱讀 2739·2019-08-29 11:29
閱讀 1498·2019-08-26 13:43
閱讀 2321·2019-08-26 13:30
閱讀 2379·2019-08-26 12:17