Concurrence - Comment le plug-in nginx implémente-t-il des opérations chronophages de manière non bloquante ?
phpcn_u1582
phpcn_u1582 2017-05-16 17:12:26
0
1
429

Description du problème :

nginx tout le monde sait que la raison de ses excellentes performances est basée sur sa base asynchrone et non bloquante. Par conséquent, lors du développement de plug-ins nginx pour gérer les requêtes réseau, vous devez vous rappeler d'effectuer certaines opérations fastidieuses de manière bloquante. Sinon, cela affectera sérieusement les performances de nginx...

Cette question se pose : Et si je souhaite effectuer des opérations chronophages dans le plugin ? Par exemple, interroger la base de données (la base de données ne prend pas en charge le protocole http, il existe un protocole spécial) ?

ps : je peux ouvrir un pool de threads et lancer ces opérations de blocage dans le pool, mais existe-t-il un moyen de suspendre le traitement des requêtes en cours dans la file d'attente des événements du framework nginx ? Lorsqu'un changement de statut est envoyé dans la fonction de rappel d'une opération de blocage, laisser nginx continuer à traiter la requête précédente ?

Merci

phpcn_u1582
phpcn_u1582

répondre à tous(1)
迷茫

La requête de base de données est essentiellement une communication réseau, tant que la lecture et l'écriture de votre socket ne sont pas bloquantes, il n'y aura aucun problème. C'est plus facile à dire qu'à faire. nginx lui-même dispose de mécanismes réutilisables pour implémenter diverses opérations non bloquantes sur http. Cependant, les communications telles que TCP peuvent ne pas être facilement disponibles. Vous devez l'écrire vous-même, ce qui me semble plus compliqué, et il doit également être intégré à nginx.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!