Parallelität – Wie implementiert das Nginx-Plug-in zeitaufwändige Vorgänge auf nicht blockierende Weise?
phpcn_u1582
phpcn_u1582 2017-05-16 17:12:26
0
1
479

Problembeschreibung:

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

phpcn_u1582
phpcn_u1582

Antworte allen(1)
迷茫

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage