Heim > Fragen und Antworten > Hauptteil
nginx Jeder weiß, dass der Grund für seine großartige Leistung in seiner asynchronen und nicht blockierenden Basis liegt. Daher müssen Sie bei der Entwicklung von Nginx-Plug-Ins zur Verarbeitung von Netzwerkanforderungen daran denken, bestimmte zeitaufwändige Vorgänge auf blockierende Weise auszuführen. Andernfalls wird die Nginx-Leistung ernsthaft beeinträchtigt ...
Es stellt sich die Frage: Was ist, wenn ich einige zeitaufwändige Vorgänge im Plugin ausführen möchte? Zum Beispiel die Datenbank abfragen (die Datenbank unterstützt das HTTP-Protokoll nicht, es gibt ein spezielles Protokoll)?
ps: Ich kann einen Thread-Pool öffnen und diese blockierenden Vorgänge in den Pool werfen, aber gibt es eine Möglichkeit, die aktuelle Anforderungsverarbeitung in der Ereigniswarteschlange des Nginx-Frameworks anzuhalten? Wenn in der Rückruffunktion einer Blockierungsoperation eine Statusänderung gesendet wird, soll Nginx die Verarbeitung der vorherigen Anfrage fortsetzen?
Danke
迷茫2017-05-16 17:14:26
数据库查询本质上就是网络通信,本质上只要你socket的read,write都是非阻塞的就没问题。说起来容易实际做起来比较复杂。nginx自身有一些可复用的机制可以实现在http上非阻塞的各种操作。然而像tcp之类的通信,可能并没有现成的。你要自己去写,我感觉比较复杂,而且还要结合在nginx里面。