Maison cadre php Swoole Comment utiliser Swoole pour implémenter un service JSONRPC hautes performances

Comment utiliser Swoole pour implémenter un service JSONRPC hautes performances

Jun 25, 2023 am 10:24 AM
jsonrpc 高性能服务 swoole

Dans le développement de réseaux, RPC (Remote Procedure Call) est un protocole de communication courant qui permet aux programmes distants de s'appeler pour implémenter des applications distribuées. Ces dernières années, alors que le développement de l'écosystème PHP continue de mûrir, le besoin d'implémenter un RPC hautes performances dans le langage PHP est devenu de plus en plus intense. En tant qu'extension PHP, Swoole fournit un réseau asynchrone, simultané et hautes performances. capacités de communication et est devenu une implémentation RPC hautes performances. Le meilleur choix pour les performances RPC.

Dans cet article, nous nous concentrerons sur la façon d'utiliser Swoole pour implémenter des services JSONRPC hautes performances, améliorant ainsi les performances et le débit des applications.

1. Introduction au protocole JSONRPC

JSONRPC (JavaScript Object Notation Remote Procedure Call) est un protocole d'appel à distance léger basé sur le format JSON. Il définit un ensemble unifié de spécifications d'interface afin que diverses applications puissent communiquer sans tracas. Dans le protocole JSONRPC, chaque demande et réponse est un objet JSON et toutes deux contiennent un champ d'identification pour identifier la relation correspondante entre la demande et la réponse.

Exemple de requête :

{
    "jsonrpc": "2.0",
    "method": "login",
    "params": {
        "username": "user",
        "password": "pass"
    },
    "id": 1
}
Copier après la connexion

Exemple de réponse :

{
    "jsonrpc": "2.0",
    "result": true,
    "id": 1
}
Copier après la connexion

Dans le protocole JSONRPC, le demandeur appelle les services distants fournis par d'autres applications en envoyant une requête avec les champs méthode et paramètres et le fournisseur renvoie une réponse A avec un champ de résultat à ; renvoie le résultat de l'appel. Le protocole JSONRPC prend en charge les requêtes et les réponses par lots, ce qui peut réduire efficacement la surcharge de communication réseau.

2. Utilisez Swoole pour implémenter le service JSONRPC

  1. Installez Swoole

Avant de commencer, nous devons d'abord installer l'extension Swoole. Vous pouvez utiliser la commande suivante pour installer :

pecl install swoole
Copier après la connexion

Vous pouvez également ajouter la ligne suivante au fichier php.ini pour installer :

extension=swoole.so
Copier après la connexion

Une fois l'installation terminée, vous pouvez utiliser la commande php -m pour vérifier si le swoole L'extension a été installée avec succès.

  1. Implémentation du serveur JSONRPC

Implémentons un simple serveur JSONRPC. Le code spécifique est le suivant :

<?php

require_once __DIR__ . '/vendor/autoload.php';

use SwooleHttpServer;
use SwooleHttpRequest;
use SwooleHttpResponse;

$server = new Server('0.0.0.0', 8080);

$server->on('Request', function (Request $request, Response $response) {
    $data = $request->rawContent();
    $arr = json_decode($data, true);
    if (isset($arr['method'])) {
        switch ($arr['method']) {
            case 'login':
                $result = login($arr['params']['username'], $arr['params']['password']);
                break;
            case 'register':
                $result = register($arr['params']['username'], $arr['params']['password']);
                break;
            default:
                $result = ['error' => 'Method not found'];
                break;
        }
    } else {
        $result = ['error' => 'Invalid request'];
    }
    $response->header('Content-Type', 'application/json');
    $response->end(json_encode([
        'jsonrpc' => '2.0',
        'result' => $result,
        'id' => $arr['id']
    ]));
});

function login($username, $password)
{
    // do login
    return true;
}

function register($username, $password)
{
    // do register
    return true;
}

$server->start();
Copier après la connexion

Le code ci-dessus implémente un serveur JSONRPC qui peut gérer les méthodes de connexion et d'enregistrement, en analysant le corps de la requête. Les données contenues dans il est traité en appelant la méthode correspondante, et le résultat du traitement est finalement renvoyé au format JSON.

  1. Implémenter le client JSONRPC

Afin de tester les fonctions du serveur JSONRPC, nous devons également implémenter un client JSONRPC. Le code spécifique est le suivant :

<?php

class JsonRpcClient
{
    private $host;
    private $port;
    private $id;

    public function __construct($host, $port)
    {
        $this->host = $host;
        $this->port = $port;
        $this->id = 0;
    }

    public function send($method, $params)
    {
        $client = new SwooleClient(SWOOLE_SOCK_TCP);
        if (!$client->connect($this->host, $this->port, 0.5)) {
            throw new Exception('Connect failed');
        }
        $client->send(json_encode([
            'jsonrpc' => '2.0',
            'method' => $method,
            'params' => $params,
            'id' => ++$this->id,
        ]));
        $data = $client->recv();
        if (!$data) {
            throw new Exception('Recv failed');
        }
        $client->close();
        $response = json_decode($data, true);
        if (isset($response['error'])) {
            throw new Exception($response['error']['message']);
        }
        return $response['result'];
    }
}

$client = new JsonRpcClient('127.0.0.1', 8080);

try {
    $result = $client->send('login', ['username' => 'user', 'password' => 'pass']);
    var_dump($result);
} catch (Exception $e) {
    echo $e->getMessage();
}
Copier après la connexion

Le code ci-dessus implémente une requête qui peut être envoyée à. le serveur JSONRPC et obtient le résultat de la réponse du client JSONRPC. En appelant la méthode send et en transmettant les paramètres method et params, vous pouvez envoyer une requête au serveur JSONRPC et obtenir le résultat de la réponse. Si la demande échoue ou renvoie un message d'erreur, une exception est levée.

3. Test de performances du service JSONRPC basé sur Swoole

Afin de vérifier les avantages en termes de performances du service JSONRPC basé sur Swoole, nous pouvons effectuer un simple test de performances. Voici la configuration de l'environnement de test :

  • CPU : Intel(R) Core(TM) i7-7700HQ CPU à 2,80 GHz
  • Mémoire : 16 Go
  • OS : Ubuntu 20.04.2 LTS
  • Version PHP : 7.4 .22
  • Version Swoole : 4.7.1

Méthode de test :

  1. Utilisez le code serveur et client JSONRPC implémenté ci-dessus
  2. Exécutez la commande ab, simulez 1000 requêtes simultanées et envoyez chaque requête 400 fois ; Enregistrer Testez les résultats et comparez-les.
  3. Les résultats des tests sont les suivants :
Concurrency Level:      1000
Time taken for tests:   1.701 seconds
Complete requests:      400000
Failed requests:        0
Total transferred:      78800000 bytes
Requests per second:    235242.03 [#/sec] (mean)
Time per request:       42.527 [ms] (mean)
Time per request:       0.043 [ms] (mean, across all concurrent requests)
Transfer rate:          45388.31 [Kbytes/sec] received
Copier après la connexion

À en juger par les résultats des tests, le service JSONRPC basé sur Swoole a des performances extrêmement élevées. Dans le cas de 1 000 requêtes simultanées, le temps de traitement moyen de chaque requête n'est que de 42,527 ms, et le débit des requêtes a atteint 235 242,03 fois/seconde.

4. Résumé

Cet article présente comment utiliser Swoole pour implémenter des services JSONRPC hautes performances et prouve ses avantages en termes de performances grâce à des tests de performances. Dans les applications réelles, nous pouvons implémenter des services RPC complexes en fonction des besoins et apporter de meilleures performances et une meilleure expérience utilisateur aux applications grâce aux fonctionnalités asynchrones, de concurrence et hautes performances de Swoole.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser la coroutine Swoole dans Laravel Comment utiliser la coroutine Swoole dans Laravel Apr 09, 2024 pm 06:48 PM

L'utilisation des coroutines Swoole dans Laravel peut traiter un grand nombre de requêtes simultanément. Les avantages incluent : Traitement simultané : permet de traiter plusieurs requêtes en même temps. Hautes performances : Basé sur le mécanisme d’événements Linux epoll, il traite efficacement les requêtes. Faible consommation de ressources : nécessite moins de ressources serveur. Facile à intégrer : intégration transparente avec le framework Laravel, simple à utiliser.

Comment utiliser Swoole pour implémenter un serveur proxy inverse HTTP hautes performances Comment utiliser Swoole pour implémenter un serveur proxy inverse HTTP hautes performances Nov 07, 2023 am 08:18 AM

Comment utiliser Swoole pour implémenter un serveur proxy inverse HTTP hautes performances Swoole est un framework de communication réseau hautes performances, asynchrone et simultané basé sur le langage PHP. Il fournit une série de fonctions réseau et peut être utilisé pour implémenter des serveurs HTTP, des serveurs WebSocket, etc. Dans cet article, nous présenterons comment utiliser Swoole pour implémenter un serveur proxy inverse HTTP hautes performances et fournirons des exemples de code spécifiques. Configuration de l'environnement Tout d'abord, nous devons installer l'extension Swoole sur le serveur

Lequel est le meilleur, Swoole ou Workerman ? Lequel est le meilleur, Swoole ou Workerman ? Apr 09, 2024 pm 07:00 PM

Swoole et Workerman sont tous deux des frameworks de serveur PHP hautes performances. Connu pour son traitement asynchrone, ses excellentes performances et son évolutivité, Swoole convient aux projets qui doivent gérer un grand nombre de requêtes simultanées et un débit élevé. Workerman offre la flexibilité des modes asynchrone et synchrone, avec une API intuitive mieux adaptée à la facilité d'utilisation et aux projets gérant des volumes de concurrence inférieurs.

Comment swoole_process permet-il aux utilisateurs de changer ? Comment swoole_process permet-il aux utilisateurs de changer ? Apr 09, 2024 pm 06:21 PM

Swoole Process permet aux utilisateurs de changer. Les étapes spécifiques sont les suivantes : créer un processus ; définir l'utilisateur du processus pour démarrer le processus ;

Comment redémarrer le service dans le framework swoole Comment redémarrer le service dans le framework swoole Apr 09, 2024 pm 06:15 PM

Pour redémarrer le service Swoole, procédez comme suit : Vérifiez l'état du service et obtenez le PID. Utilisez "kill -15 PID" pour arrêter le service. Redémarrez le service en utilisant la même commande que celle utilisée pour démarrer le service.

Lequel a les meilleures performances, swoole ou java ? Lequel a les meilleures performances, swoole ou java ? Apr 09, 2024 pm 07:03 PM

Comparaison des performances : Débit : Swoole a un débit plus élevé grâce à son mécanisme de coroutine. Latence : la commutation de contexte de coroutine de Swoole a une surcharge et une latence plus faibles. Consommation de mémoire : les coroutines de Swoole occupent moins de mémoire. Facilité d'utilisation : Swoole fournit une API de programmation simultanée plus facile à utiliser.

Swoole en action : Comment utiliser les coroutines pour le traitement de tâches simultanées Swoole en action : Comment utiliser les coroutines pour le traitement de tâches simultanées Nov 07, 2023 pm 02:55 PM

Swoole en action : Comment utiliser les coroutines pour le traitement de tâches simultanées Introduction Dans le développement quotidien, nous rencontrons souvent des situations où nous devons gérer plusieurs tâches en même temps. La méthode de traitement traditionnelle consiste à utiliser plusieurs threads ou multi-processus pour réaliser un traitement simultané, mais cette méthode présente certains problèmes de performances et de consommation de ressources. En tant que langage de script, PHP ne peut généralement pas utiliser directement des méthodes multithread ou multi-processus pour gérer les tâches. Cependant, avec l'aide de la bibliothèque de coroutines Swoole, nous pouvons utiliser des coroutines pour obtenir un traitement de tâches simultanées hautes performances. Cet article présentera

Comment est programmée la coroutine swoole ? Comment est programmée la coroutine swoole ? Apr 09, 2024 pm 07:06 PM

Swoole coroutine est une bibliothèque de concurrence légère qui permet aux développeurs d'écrire des programmes simultanés. Le mécanisme de planification des coroutines Swoole est basé sur le modèle de coroutine et la boucle d'événements, utilisant la pile de coroutines pour gérer l'exécution des coroutines et suspendant les coroutines après qu'elles aient perdu le contrôle. La boucle d'événements gère les événements d'E/S et de minuterie. Lorsque la coroutine abandonne le contrôle, elle est suspendue et revient à la boucle d'événements. Lorsqu'un événement se produit, Swoole passe de la boucle d'événements à la coroutine en attente, complétant le changement en enregistrant et en chargeant l'état de la coroutine. La planification des coroutines utilise un mécanisme de priorité et prend en charge les opérations de suspension, de mise en veille et de reprise pour contrôler de manière flexible l'exécution de la coroutine.

See all articles