亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

壓測 swoole_websocket_server 性能

余學(xué)文 / 1847人閱讀

摘要:概述這是關(guān)于入門學(xué)習(xí)的第十篇文章壓測性能。測試機上安裝的虛擬機系統(tǒng)內(nèi)存數(shù)量核數(shù)數(shù)量大小代碼壓測腳本并發(fā)量請求量壓測結(jié)果第次第次第次以上是壓測結(jié)果,供參考。小結(jié)通過這個壓測結(jié)果,表明的執(zhí)行效率是杠杠的當(dāng)然還有一些參數(shù)是可以調(diào)優(yōu)的,比如等。

概述

這是關(guān)于 Swoole 入門學(xué)習(xí)的第十篇文章:壓測 swoole_websocket_server 性能。

第九篇:Swoole Redis 連接池的實現(xiàn)

第八篇:Swoole MySQL 的實現(xiàn)

第七篇:Swoole RPC 的實現(xiàn)

第六篇:Swoole 整合成一個小框架

第五篇:Swoole 多協(xié)議 多端口 的應(yīng)用

第四篇:Swoole HTTP 的應(yīng)用

第三篇:Swoole WebSocket 的應(yīng)用

第二篇:Swoole Task 的應(yīng)用

第一篇:Swoole Timer 的應(yīng)用

收到讀者提問 “使用 Swoole 開發(fā)的群聊功能,想知道并發(fā)情況,也就是想壓測下 QPS,一直未找到方法 ...”

對 swoole_http_server 壓測,咱們可以使用 Apache 的 ab 命令。

對 swoole_websocket_server 壓測,使用 ab 命令是不能壓測的,我從網(wǎng)上一直也沒找到合適的方法,看官方提供的代碼 benchmark/async.php 中,使用的異步模塊 swoolehttpclient 方法進行壓測的,但在 Swoole 4.3 版本就移除了異步模塊,讓使用 Coroutine 協(xié)程模塊。

在本地我用 Coroutine 協(xié)程實現(xiàn)了一下, 測的差不多的時候,一直不確定是否正確,就在 segmentfault 發(fā)了個提問,沒想到韓老師回答了,"如果的如果"老師也回答了,非常感謝兩位老師的答案,然后整理出文章分享給大家。

測試機

Mac 上安裝的 Parallels Desktop 虛擬機

系統(tǒng):Ubuntu 16.04.3 LTS

內(nèi)存:

數(shù)量:1

核數(shù):2

CPU:

數(shù)量:1

大?。?G

Server 代碼
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();
壓測腳本
class Test
{
    protected $concurrency; //并發(fā)量
    protected $request;     //請求量
    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();
壓測結(jié)果
第 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

以上是壓測結(jié)果,供參考。

小結(jié)

通過這個壓測結(jié)果,表明 Swoole 的執(zhí)行效率是杠杠的!

當(dāng)然還有一些參數(shù)是可以調(diào)優(yōu)的,比如:worker_num、max_request、task_worker_num 等。

在真實的業(yè)務(wù)場景中,肯定會有邏輯處理,也會使用到 MySQL、Redis。

那么問題來了,前兩篇文章已經(jīng)分享了,Swoole Redis 連接池、Swoole MySQL 連接池,感興趣的同學(xué),可以使用上兩種連接池,然后再進行壓測。

不知不覺,Swoole 入門文章已經(jīng)寫了 10 篇了,非常感謝大家的捧場,真心希望能夠?qū)?Swoole 入門學(xué)習(xí)的同學(xué),有點幫助。

推薦閱讀

系統(tǒng)的講解 - SSO 單點登錄

系統(tǒng)的講解 - PHP WEB 安全防御

系統(tǒng)的講解 - PHP 緩存技術(shù)

系統(tǒng)的講解 - PHP 接口簽名驗證

系統(tǒng)的講解 - PHP 浮點數(shù)高精度運算

本文歡迎轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)請注明作者和出處,謝謝!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/31666.html

相關(guān)文章

  • 實戰(zhàn) swoole【聊天室】

    摘要:是一個請求對象,包含了客戶端發(fā)來的握手請求信息事件函數(shù)中可以調(diào)用向客戶端發(fā)送數(shù)據(jù)或者調(diào)用關(guān)閉連接事件回調(diào)是可選的當(dāng)服務(wù)器收到來自客戶端的數(shù)據(jù)幀時會回調(diào)此函數(shù)。 前言:了解概念之后就應(yīng)該練練手啦,不然就是巨嬰 有收獲的話請加顆小星星,沒有收獲的話可以 反對 沒有幫助 舉報三連 代碼倉庫 實戰(zhàn)swoole【聊天室】 在線體驗 準(zhǔn)備工作 需要先看初識swoole【上】,了解基本的服務(wù)端...

    andycall 評論0 收藏0
  • 基于 Swoole 的微信掃碼登錄

    摘要:隨著微信的普及,掃碼登錄方式越來越被現(xiàn)在的應(yīng)用所使用。這里基于微信公眾平臺的帶參數(shù)臨時二維碼,并且結(jié)合的服務(wù)實現(xiàn)掃碼登錄。對于用戶掃臨時的二維碼,微信會觸發(fā)相應(yīng)的回調(diào)事件,我們需要在該回調(diào)事件中處理用戶的掃碼行為。 隨著微信的普及,掃碼登錄方式越來越被現(xiàn)在的應(yīng)用所使用。它因為不用去記住密碼,只要有微信號即可方便快捷登錄。微信的開放平臺原生就有支持掃碼登錄的功能,不過大部分人還是在用公眾...

    Half 評論0 收藏0
  • 全鏈路壓測一招搞定,阿里云性能測試鉑金版發(fā)布

    摘要:摘要阿里云性能測試是卓越的性能測試平臺,具備強大的分布式壓測能力,可模擬海量用戶的真實業(yè)務(wù)場景,讓所有性能問題無所遁形。近日,宣布推出了基于阿里雙全鏈路壓測平臺的鉑金版。 摘要: 阿里云性能測試(Performance Testing Service)是卓越的SaaS性能測試平臺,具備強大的分布式壓測能力,可模擬海量用戶的真實業(yè)務(wù)場景,讓所有性能問題無所遁形。近日,PTS宣布推出了基于...

    zhaochunqi 評論0 收藏0
  • 全鏈路壓測一招搞定,阿里云性能測試鉑金版發(fā)布

    摘要:摘要阿里云性能測試是卓越的性能測試平臺,具備強大的分布式壓測能力,可模擬海量用戶的真實業(yè)務(wù)場景,讓所有性能問題無所遁形。近日,宣布推出了基于阿里雙全鏈路壓測平臺的鉑金版。 摘要: 阿里云性能測試(Performance Testing Service)是卓越的SaaS性能測試平臺,具備強大的分布式壓測能力,可模擬海量用戶的真實業(yè)務(wù)場景,讓所有性能問題無所遁形。近日,PTS宣布推出了基于...

    gotham 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<