De nos jours, de nombreuses entreprises utilisent LDAP (Lightweight Directory Access Protocol) comme système d'authentification de l'identité des utilisateurs, mais les opérations de requête LDAP peuvent facilement provoquer des goulots d'étranglement en termes de performances. À l’heure actuelle, vous devez utiliser Swoole pour prendre en charge les opérations LDAP asynchrones afin d’améliorer les performances du système.
Swoole est un framework de communication réseau asynchrone hautes performances basé sur le langage PHP. Il intègre des composants d'E/S asynchrones communs tels que socket asynchrone, MySQL asynchrone, Redis asynchrone, etc., et prend en charge le DNS asynchrone, le client HTTP asynchrone, l'asynchrone. Serveur HTTP et autres fonctions . Les hautes performances et les fonctionnalités d'E/S asynchrones de Swoole le rendent très approprié pour la communication réseau dans des scénarios à haute concurrence, tels que les services HTTP, les services TCP, les services WebSocket, etc.
Tout d’abord, nous devons installer l’extension Swoole. Il peut être installé via la commande suivante :
pecl install swoole
Une fois l'installation terminée, ajoutez le code suivant en PHP pour activer l'extension Swoole :
extension=swoole.so
Ensuite, nous pouvons créer un client LDAP asynchrone via le code suivant :
$client = new SwooleCoroutineClient(SWOOLE_SOCK_TCP); if (!$client->connect('ldap://localhost', 389)) { echo "connect failed. Error: {$client->errCode} "; exit; } $client->set([ 'open_ldap' => true, 'timeout' => 2, ]); if (!$client->startTls()) { echo "Error: StartTLS failed. Error: {$client->errCode} "; exit; } if (!$client->bind('cn=admin,dc=example,dc=com', 'password')) { echo "Error: Bind failed. Error: {$client->errCode} "; exit; } if (!$client->search('ou=People,dc=example,dc=com', 'uid=guybrush', ['dn', 'cn', 'mail'])) { echo "Error: Search failed. Error: {$client->errCode} "; exit; } while (true) { $entry = $client->getReplies(); if ($entry === false) { echo "Error: Get reply failed. Error: {$client->errCode} "; exit; } if (!$entry) break; foreach ($entry as $item) { echo "dn: " . $item['dn'] . " "; echo "cn: " . $item['cn'] . " "; echo "mail: " . $item['mail'] . " "; } } $client->close();
Dans le code ci-dessus, nous utilisons le client TCP asynchrone de Swoole pour nous connecter au service LDAP, puis utilisons la méthode startTls() pour activer le cryptage TLS, utilisons la méthode bind() pour lier le compte administrateur et le mot de passe, et enfin utilisons la recherche( ) pour interroger le DN spécifié qui correspond aux enregistrements de conditions. Notez que la méthode search() renvoie un objet Generator et que nous devons utiliser la méthode getReplies() pour obtenir les résultats de la requête.
Il convient de noter que lors de l'utilisation de Swoole pour des opérations LDAP asynchrones, la prise en charge d'OpenLDAP doit être activée, sinon TLS ne sera pas activé ou d'autres erreurs se produiront. Nous pouvons activer le support OpenLDAP lors de la compilation de l'extension Swoole :
./configure --enable-openssl --enable-sockets --enable-http2 --enable-coroutine --enable-async-redis --enable-async-mysql --enable-async-httpclient --enable-async-filesystem --enable-open-ldap
En plus des méthodes mentionnées ci-dessus, Swoole fournit également d'autres méthodes LDAP, telles que la méthode add() pour ajouter un enregistrement et la méthode edit() pour modifier un enregistrement. record. records, et la méthode delete() est utilisée pour supprimer un enregistrement. L'utilisation de ces méthodes est similaire à la méthode search(). Elles renverront des objets Generator. Vous devez utiliser la méthode getReplies() pour obtenir les résultats.
Dans l'ensemble, utiliser Swoole pour les opérations LDAP asynchrones est très simple. Grâce à la fonctionnalité IO asynchrone de Swoole, nous pouvons éviter les problèmes de performances causés par le blocage des opérations de requête LDAP et obtenir de meilleures performances.
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!