2013-05-01 7 views
17

Ich möchte nicht blockierende Anwendungen schreiben. Ich benutze Apache2, aber ich lese über Nginx und seinen Vorteil in Bezug auf Apache-Prozesse. Ich überlege mir, Apache für nginx zu ändern. Meine Frage ist, ist es möglich, nicht blockierende Web-Anwendungen mit PHP und Nginx zu schreiben ?.PHP nicht blockierende Anwendungen schreiben

Oder ist eine bessere Idee zu versuchen, dies mit Python zu tun, mit einigen Reverse-Proxy wie uwsgi oder Gunicorn mit Nginx? Oder ist die Lösung, nodejs zu lernen?

Antwort

12

Schreiben nicht blockierende Anwendungen in PHP ist möglich, aber es ist wahrscheinlich nicht die beste Umgebung, um dies zu tun, wie es nicht erstellt wurde, dies zu beachten! Mit der Prozesssteuerungsbibliothek PCNTL erhalten Sie eine recht ordentliche Kontrolle über Ihre untergeordneten Prozesse, aber es bietet Ihnen offensichtlich nicht die gleiche Benutzerfreundlichkeit, die Ihnen andere Umgebungen bieten können!

Ich weiß Python nicht sehr gut, aber persönlich habe ich empfohlen, Sie gehen mit nodejs! Es ist eine ziemlich neue Technologie, das stimmt, aber dort ist alles nicht blockiert und es soll so sein! Was Sie haben, ist ein einzelner Thread (den Sie erweitern können, wie Sie wollen, in diesen News-Versionen) und buchstäblich alles (außer Sie sagen, es anders zu tun) wird ereignisgesteuert sein, so dass Platz in der Prozess-Warteschlange als erwartet!

Nodejs ist wirklich einfach zu lernen, wenn Sie jemals über Web-Anwendungen gestolpert sind, wissen Sie Javascript sowieso! Es ist noch nicht sehr umfangreich dokumentiert, aber es gibt viele fertige Module, die Sie sofort herunterladen und verwenden können!

+3

@DarthVader Javascript ist eine wirklich mächtige Sprache, wenn Sie wissen, wie es zu nähern! Du weißt, dass du eine Menge Callbacks hast, oder? zu wissen, dass dir vorher die möglichkeit gibt, anders zu denken, als der durchschnittliche web-entwickler, der nur eine jquery-funktionalität benötigt: D ich glaube nicht wirklich, dass nodejs nur ein spielzeug-app-angebot ist! Gut wie immer hängt alles davon ab, was Sie brauchen! Aber ich kann dir garantieren, dass ich verdammt große Projekte in js gesehen habe! – Ivo

+0

@DarthVader einige Kommentare über Python? –

+0

nein ist es nicht. kannst du js mit C# oder java vergleichen? Es ist eine andere Sprache. – DarthVader

2

Wenn Sie eine nicht blockierende App ohne großen Aufwand haben möchten, können Sie versuchen, pushpin zu verwenden. Ich benutze es in einer meiner Anwendungen und es funktioniert großartig. Sie können mehr Informationen über den Autor blog post herausfinden. Ich habe dies zu einem bestehenden Projekt hinzugefügt und den bestehenden Code fast nicht geändert.

Wenn Sie Knoten verwenden möchten, stellen Sie sicher, dass dies das richtige Werkzeug für den Job ist. Überprüfe Stack-Überlauf-Fragen, da es bereits Antworten auf diese Frage gibt. Fragen Sie sich, ob Ihre Anwendungsidee in die Knotenfähigkeiten passt. Versuchen Sie zum Beispiel Why and When to use node js? und How to decide when to use NodeJS?.

3

Ich habe nicht auf Reißzwecke noch gesucht, aber ich schreibe diese Antwort auf einen anderen Rahmen zu verweisen, die nicht blockierende Anwendungen in PHP unterstützt:

Reagieren http://reactphp.org/

Es einen Server unterstützt die Bindung an HTTP oder WebSocket und kann mit Webserver-Software wie Nginx verwendet werden, indem Anfragen (über proxy_pass) über HTTP weitergeleitet werden. Sie können sogar HTTPS auf dem Webserver verwenden und diesen unverschlüsselt weiterleiten. (SSL-Unterstützung in React fehlt.)

Es scheint noch keine FastCGI- oder UWSGI-Unterstützung zu geben, zumindest nicht im Upstream-Projekt.

Der Stil ähnelt dem Schreiben von node.js, Sie schließen PHP 5.3 + -Schließungen an Ereignisse an, und es verwendet die nicht blockierenden Sockets transparent darunter. Es gibt gute Beispiele auf dieser Website, daher werde ich sie hier nicht wiederholen, da Sie nicht speziell nach einem Anwendungsfall gefragt haben.

AKTUALISIERT: Ich habe gerade die Pushpin-Website angeschaut und es ist kein Framework oder Tool zum Schreiben nicht blockierender PHP Anwendungen wie im Titel der Frage gefordert. Es scheint jedoch, dass es als Teil einer Lösung nützlich wäre.

4

Swoole ist eine gute Wahl für nicht-blockierenden PHP-Anwendung zu schreiben

hier ist ein Beispiel:

$fp = stream_socket_client("tcp://127.0.0.1:80", $code, $msg, 3); 
$http_request = "GET /index.html HTTP/1.1\r\n\r\n"; 
fwrite($fp, $http_request); 
swoole_event_add($fp, function($fp){ 
    echo fread($fp, 8192); 
    swoole_event_del($fp); 
    fclose($fp); 
}); 
swoole_timer_after(2000, function() { 
    echo "2000ms timeout\n"; 
}); 
swoole_timer_tick(1000, function() { 
    echo "1000ms interval\n"; 
}); 
Verwandte Themen