hyperf、netsvr与webman、gatewayWorker比较websocket的IOPS

netsvr是我写的一个类似于gatewayWorker的,但是只能用来处理websocket的网关层。

环境介绍

压测工具:wsbench
压测数据:数据是0.5kb的字符串
机器配置:
宿主机
hyperf、netsvr与webman、gatewayWorker比较websocket的IOPS
虚拟机
hyperf、netsvr与webman、gatewayWorker比较websocket的IOPS

被压程序跑Linux的虚拟机,压测命令跑物理机。

压测hyperf、netsvr

这里要注意,我安装了protobuf的C扩展,编解码速度比没有C扩展的情况下更快。
程序初始状态:
Business系列进程是被压测的进程。

[root@localhost hyperf-skeleton]# php bin/hyperf.php start
[INFO] TaskWorker#4 started.
[INFO] Process[alarm.0] start.
[INFO] Business#2 socket 127.0.0.1:6061 connect ok.
[INFO] Business#0 socket 127.0.0.1:6061 connect ok.
[INFO] Business#3 socket 127.0.0.1:6061 connect ok.
[INFO] Process[queue.default.0] start.
[INFO] Business#1 socket 127.0.0.1:6061 connect ok.
[INFO] Business#3 started.
[INFO] Worker#3 started.
[INFO] Business#0 started.
[INFO] Business#2 started.
[INFO] grpc service register closed!
[INFO] Business#1 started.
[INFO] Worker#2 started.
[INFO] Worker#0 started.
[INFO] Worker#1 started.
[INFO] HTTP Server listening at 0.0.0.0:9501

服务端代码:

public function onMessage(Transfer $transfer, RouterInterface $clientRouter): void
{
    NetBus::singleCast($transfer->getUniqId(), '001'.$clientRouter->getData());
}

压测命令:

wsbench echo -c 2000 -n 100000  -f C:/Users/Administrator/Desktop/1kb.txt -u ws://192.168.241.2:7272 --concurrency=1

压测结果:

8:08PM INF Duration=7.0623007s IOPS=14160 P50=94ms P90=312ms P99=563ms
8:08PM INF Duration=7.3806593s IOPS=13550 P50=100ms P90=180ms P99=512ms
8:09PM INF Duration=7.6449932s IOPS=13081 P50=88ms P90=235ms P99=953ms
8:09PM INF Duration=7.8098959s IOPS=12805 P50=87ms P90=193ms P99=561ms
8:09PM INF Duration=6.2167098s IOPS=16085 P50=103ms P90=190ms P99=498ms

压测webman、gatewayWorker

程序初始状态:

[root@localhost infoLive]# php start.php start
Workerman[start.php] start in DEBUG mode
-------------------------------------------------------- WORKERMAN ---------------------------------------------
Workerman version:4.1.13          PHP version:8.1.9           Event-Loop:Workerman\Events\Swoole
--------------------------------------------------------- WORKERS ----------------------------------------------
proto   user            worker                                   listen                      processes    status           
tcp     root            plugin.webman.gateway-worker.gateway     websocket://0.0.0.0:7272    4             [OK]            
tcp     root            plugin.webman.gateway-worker.register    text://127.0.0.1:1236       1             [OK]            
tcp     root            plugin.webman.gateway-worker.worker      none                        8             [OK]            
tcp     root            plugin.webman.redis-queue.consumer       none                        4             [OK]            
----------------------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.

服务端代码:

public static function onMessage(string $client_id, string $message): void
{
    Gateway::sendToClient($client_id,$message);
}

压测命令:

wsbench echo -c 2000 -n 100000  -f C:/Users/Administrator/Desktop/1kb.txt -u ws://192.168.241.2:7272 --concurrency=1

压测结果:

8:32PM INF Duration=8.1009998s IOPS=12344 P50=46ms P90=117ms P99=927ms
8:33PM INF Duration=5.5673919s IOPS=17961 P50=50ms P90=139ms P99=457ms
8:33PM INF Duration=6.4187265s IOPS=15580 P50=49ms P90=120ms P99=445ms
8:33PM INF Duration=5.4374454s IOPS=18390 P50=44ms P90=128ms P99=926ms
8:33PM INF Duration=6.1752876s IOPS=16194 P50=47ms P90=124ms P99=942ms

结论

上诉条件下,我写的netsvr,惜败。

本作品采用《CC 协议》,转载必须注明作者和本文链接
梦想星辰大海
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!