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
数据库查询本质上就是网络通信,本质上只要你socket的read,write都是非阻塞的就没问题。说起来容易实际做起来比较复杂。nginx自身有一些可复用的机制可以实现在http上非阻塞的各种操作。然而像tcp之类的通信,可能并没有现成的。你要自己去写,我感觉比较复杂,而且还要结合在nginx里面。