Grupo de conexiones MySQL realizado por la función de rutina Swoole2

Utilice Swoole2 \ Swoole \ Coroutine \ MySQL para crear una conexión, mantenga el grupo de conexiones a través de clases estáticas y propiedades de miembros estáticos, y diferentes corrutinas pueden compartir el grupo de conexiones.

El mecanismo de cola (primero en entrar, primero en salir) se implementa utilizando funciones especiales de la corrutina:

  • \ Swoole \ Coroutine :: resume ($ name): Reanuda la ejecución de una corrutina suspendida desde el nombre de dominio $ name;

  • \ Swoole \ Coroutine :: suspend ($ name): Suspende la corrutina actual al $ name en sí.

factor de limitación

  • Cada trabajador tiene su propio grupo de conexiones MySQL y diferentes trabajadores no pueden compartir el grupo de conexiones MySQL de los demás;

  • Puede haber diferencias en la maximización del grupo de conexiones de cada proceso de trabajo (según la implementación empresarial).

ventaja

  • En comparación con el grupo de conexiones independiente (implementación del grupo de conexiones que se puede compartir entre procesos de trabajo), no hay sobrecarga de comunicación entre progresos;

  • Los grupos de conexiones independientes necesitan aumentar los costos de operación y mantenimiento.

Instrucciones

/ ** 
*初始化连接池
* 
* @param array $ connsConfig配置数组
* [ 
*'connName1'=> [ 
*'serverInfo'=> ['host'=>'127.0.0.1''user'=>'测试''password'=>'pass''database'=>'tt''charset'=>'utf8']// \ Swoole \ Coroutine \ MySQL的连接参数
*'maxSpareConns'=> 5/ /最大链接连接数
*'maxConns'=> 10//最大连接数
*]*'connName2'=> [ 
*'serverInfo'=> ['host'=>'127.0.0.2''user'= >'test''password'=>'pass''database'=>'tt''charset'=>'utf8']// \ Swoole \ Coroutine \ MySQL的连接参数
*'maxSpareConns'=> 5//最大连接数
*'maxConns'=> 10//最大连接数
*]*] 
* / 
Swoole \ Coroutine\ Pool \ MySQLPool :: init(数组$ connsConfig)

/ ** 
*回收连接,该连接必须是从连接池中获取的连接
** 
@param \ Swoole \ Coroutine \ MySQL $ conn从连接池中获取的连接
* / 
Swoole \ Coroutine \ Pool \ MySQLPool :: recycle( \ Swoole \ Coroutine \ MySQL  $ conn)

/ ** 
*从连接池中获取一条连接
* 
* @param string $ connName init时配置的连接,根据连接名称获取对应的连接
* @return \ Swoole \ Coroutine \ MySQL返回一个连接实例
* / 
Swoole \ Coroutine \ 池 \ MySQLPool :: 提取($ connName)

Ejemplo de uso

<?php 
需要 'MySQLPool.php' ;
使用 Swoole \ Coroutine \ Pool \ MySQLPool ;

$ server =新的 Swoole \ Http \ Server( “ 127.0.0.1”, 9502SWOOLE_BASE;
$服务器 - >组([
         'worker_num' => 1];
$服务器 - >上( '请求',功能( $请求, $响应){
    
    
         MySQLPool :: INIT[
                 '测试' => [
                         'serverInfo' => [ '主机' => '192.168.244.128' , “用户' => 'mha_manager', 'password' => 'mhapass', 'database' => 'tt', 'charset' =>'utf8' ],
                        'maxSpareConns' => 5,
                         'maxConns' => 10
                ],
        ]);
        $ swoole_mysql = MySQLPool :: fetch( 'test');
        $ ret = $ swoole_mysql- >查询( 'select sleep(1');
        MySQLPool ::回收( $ swoole_mysql);
        $ response- > end( 'Test End');
};
$ server- > start();

Comando de prueba de presión: ab -c 20 -n 100 -s 100 http://127.0.0.1:9502/, 20 concurrentes, 100 solicitudes en total.

Resultados de la prueba de presión:

Inserte la descripción de la imagen aquí

La situación de conexión durante la prueba de esfuerzo es de 20 simultáneas, y el número máximo de conexiones está limitado a 10, por lo que solo se pueden establecer 10 conexiones con la base de datos como máximo:

Después de la prueba de presión, el número máximo de conexiones se establece en 5, por lo que ahora, cuando no hay solicitud del cliente, la mayoría de las conexiones permanecen en 5:

Aquí solo un proceso de trabajo está trabajando en el lado del servidor, se completan 100 solicitudes y la consulta SQL para cada solicitud es dormir 1 segundo, lo que tomó aproximadamente 11 segundos. Si es un modo php-fpm + mysqli, 1 proceso de trabajo, Entonces tomaría 100 segundos.

Así que aquí es donde radica la ventaja de la corrutina: con la conmutación de corrutina IO + no dual, un proceso de trabajo puede manejar múltiples solicitudes de clientes al mismo tiempo, lo que mejora enormemente el rendimiento.

Presta atención, no te pierdas

Muy bien, todos, lo anterior es todo el contenido de este artículo. Las personas que pueden ver aquí son todos talentos . Como dije antes, hay muchos puntos técnicos en PHP, porque hay demasiados, es realmente imposible de escribir, y no leerás demasiado después de escribirlo, así que lo organizaré en PDF y documentos aquí, si es necesario. Poder

Haga clic para ingresar el código secreto: PHP + 「Plataforma」

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí


Para obtener más contenido de aprendizaje, puede visitar el Catálogo [Comparative Standard Factory] de excelentes tutoriales de arquitecto PHP, siempre que pueda leerlo para asegurarse de que el salario aumentará un paso (actualización continua)

El contenido anterior espera poder ayudarte . Muchos PHPers siempre encuentran algunos problemas y cuellos de botella cuando están avanzados. No hay sentido de dirección cuando escriben demasiado código comercial. No sé por dónde empezar a mejorar. He recopilado información sobre esto, incluyendo Pero no se limita a: arquitectura distribuida, alta escalabilidad, alto rendimiento, alta concurrencia, ajuste del rendimiento del servidor, TP6, laravel, YII2, Redis, Swoole, Swoft, Kafka, optimización de Mysql, scripts de shell, Docker, microservicios, Nginx, etc. Se pueden compartir múltiples puntos de conocimiento, productos secos avanzados avanzados, con todos de forma gratuita, y aquellos que sean necesarios pueden unirse a mi grupo de intercambio de tecnología PHP

Supongo que te gusta

Origin blog.csdn.net/weixin_49163826/article/details/108680551
Recomendado
Clasificación