sponsored links

GatewayWorker 连接数测试

    近段时间在做一个php项目,使用Laravel框架,需要做一个IM聊天功能。首先想到使用Workerman的GatewayWork框架配合Laravel服务器来实现此功能。但之前没有使用过GatewayWork,对其性能及连接数没底,想想还是自己做一个压力测试看看。

服务器环境:

 centos7.4 + php 7.2 + GatewayWork3.0.12

测试方法:在本地机上使用python脚本进行测试,本人没写过python代码,所以在网上找了一个代码下载下来。废话少说,直接记录测试步骤及结果吧。

1、本地安装python:下载python-3.7.3-amd64.exe,安装就好了

2、安装websocket依赖:pip install websocket-client

GatewayWorker 连接数测试

3、python 代码:注意修改自己的 ip:port,以及修改测试时开启的线程数。

import time
import websocket
import threading
import random


def wsCliet(msg):
    """
    websocket发送数据
    :param msg:
    :return:
    """
    ws = websocket.create_connection("ws://ip:port")
    try:
        while True:
            ws.send(bytes(msg, encoding='utf-8'))
            result = ws.recv()
            if result:
#                print("响应数据:", result)
                time.sleep(random.randint(5,20))
            else:
                print("失败!没获取到响应数据!")
                ws.close()
                break
#        ws.close()
    except Exception as e:
        print("连接失败:%s" % e)


def run_thread(num):
    """
    多线程创建websocket连接
    :param num:
    :return:
    """
    for i in range(int(num)):
        if(i%200)==1:
            sleep_s = 0.001*i
            if sleep_s > 5 :
                sleep_s = 5
            time.sleep(sleep_s)
        t = threading.Thread(target=wsCliet, args=('测试数据', ))
        t.start()

    while True:
        length = len(threading.enumerate())
        print('当前运行的线程数为:%d' % length)
        time.sleep(2)
#        if length <= num:
#            break

run_thread(20000)

4、服务器上部署GatewayWorker。一定要看手册的:https://www.kancloud.cn/walkor/gateway-worker/642185,根据上面的安装说明来操作就可以了,主要要注意的问题有:

(1)修改一下Events.php,根据自己的测试需要来就好。比如我的,就是简单的把数据写回去,开始时开启一个定时器,不停输出当前的连接数,注意这个输出,每个业务线程都会执行,所以也可以修改一下,只让一个业务线程输出。

use Workerman\Lib\Timer;

public static function onConnect($client_id)
    {
        Gateway::sendToClient($client_id, json_encode(array(
            'type'      => 'init',
            'clientId' => $client_id
        )));
    }
    
 
   public static function onMessage($client_id, $message)
   {
       Gateway::sendToClient($client_id,$message);
   }
   

   public static function onClose($client_id)
   {

   }

    public static function onWorkerStart($businessWorker)
    {

        Timer::add(5, function(){
            echo GateWay::getAllClientCount();
            echo "\r\n";
        }, array(), true);

    }

(2)服务器优化:优化内核以及安装相关扩展,这步很重要!!!,不然没法测试这么大量的连接数。

安装扩展:http://doc.workerman.net/install/install.html   

优化内核:http://doc.workerman.net/appendices/kernel-optimization.html

还是按照说明来吧,我的centos,说明里说只能安装event扩展,不有安装libevent扩展,已安装的扩展可以不用再安装了。所以:

yum install php-devel php-pear httpd-devel libevent-devel -y

这其中有pecl命令的依赖(-bash: pecl: command not found)。好吧,按照说明文档来就好了,没什么可说的

GatewayWorker 连接数测试

内核优化,直接去看文档吧。

5、测试:使用python自带的IDLE,运行python脚本,看连接数以及服务器性能情况。

GatewayWorker 连接数测试

GatewayWorker 连接数测试

看测试结果,2W个连接数还是没问题的,在内网测试,连接还是挺稳定的,至于业务压力和网络压力,根据需求再做测试吧。

Tags: