Frage Unterschiede zwischen node.js und Tornado [geschlossen]


Abgesehen von der Tatsache, dass node.js in JS und Tornado in Python geschrieben ist, was sind die Unterschiede zwischen den beiden? Sie sind beide nicht blockierende asynchrone Webserver, oder? Warum wählen Sie neben der Sprache eines über das andere hinaus?


76
2018-04-06 05:06


Ursprung


Antworten:


Der Hauptvorteil von node.js ist das Alle Bibliotheken sind asynchron Sie müssen sich also nicht viel Gedanken über das Blockieren machen. Es gibt asynchrone Bibliotheken für mysql, postgres, redis usw. Alle sind standardmäßig async.

Python hat eine Bibliothek für alles - aber die meisten dieser Bibliotheken sind nicht asynchron. Um Tornado zu nutzen (und den Prozess nicht zu blockieren), sind spezielle Bibliotheken notwendig (z. B. können Sie nicht einfach "pip install redis" installieren und verwenden, Sie benötigen etwas wie Brukva) und es gibt viel weniger Tornado-Bibliotheken als node.js-Bibliotheken. Momentan ist zum Beispiel kein async mysql Tornado-Treiber verfügbar (oder zumindest ist mir das nicht bekannt).

Aber Sie können immer noch viele Python-Bibliotheken mit Tornado verwenden (solche, die i / o nicht tun), und die Tornado-Gemeinschaft hebt und füllt die Lücken.

Es ist einfacher, eine App mit node.js zu schreiben, als Tornado nach meiner Erfahrung zu verwenden. Ich persönlich wechselte von node.js zu Tornado, weil es besser in die vorhandene Infrastruktur meines Python-Projekts passt (die Integration zwischen der Django-Site, die HTML-Seiten bedient, und dem Tornado-Server, der Echtzeitfunktionen bietet, war ziemlich schmerzlos).


95
2018-04-06 14:14



Wie Rich Bradshaw hervorhebt Node.js ist in JS geschrieben, was bedeutet, dass Sie das Front-End und das Back-End in der gleichen Sprache behalten und möglicherweise einige Codebasen teilen können. Für mich ist das ein großer potenzieller Vorteil von Node.js. Knoten kommt auch mit mehr asynchronen Bibliotheken aus der Box, wie es scheint.

V8 sollte JS schneller als Python machen zumindest scheinen das Benchmarks zu suggerieren, aber es mag nicht viel ausmachen, weil beides Node.js und Tornado (und die meisten anderen Web-Frameworks) verwenden Wrapper für native Bibliotheken. Viele der Python-Standardbibliotheken sind in C geschrieben oder können durch eine schnellere Alternative ersetzt werden, wodurch mögliche Unterschiede noch mehr gemildert werden.

Web-Services sind in der Regel E / A-gebunden. Das heißt, wir verbringen die Zeit damit, auf den Datenspeicher zu warten und die Daten nicht zu verarbeiten. Das macht den synthetischen Geschwindigkeitsunterschied zwischen JS und Python in vielen Anwendungen irrelevant.


12
2017-09-18 07:30



node.js verwendet V8, das in Assemblercode kompiliert wird, Tornado tut das noch nicht.

Abgesehen davon (was eigentlich nicht viel für die Geschwindigkeit ausmacht), ist es das Ökosystem. Bevorzugen Sie das Ereignismodell von JS oder die Funktionsweise von Python? Sind Sie glücklicher mit Python- oder JS-Bibliotheken?


10
2018-04-06 08:52



Nodejs hat auch eine nahtlose Integration / Implementierung von Websockets namens Socket.io. Es behandelt Browser, die Sockets - Events unterstützen, und verfügt auch über Rückwärtsabfragekompatibilität für ältere Browser. Es ist recht schnell in der Entwicklung, die ein Benachrichtigungsframework oder eine ähnliche ereignisbasierte Programmierung erfordert.


3
2018-02-07 06:36



Ich würde vorschlagen, Sie gehen mit NodeJS, wenn es keine persönliche Pref zu Python gibt. Ich mag Python sehr, aber für Async wähle ich Tornado über Knoten, und später musste ich Schwierigkeiten haben, etwas zu finden, oder Bibliotheken mit Async-Unterstützung (wie Cassandra hat Async in Tests, aber nirgendwo konnte ich cqlengine mit verwenden async. Ich musste Mongo wählen, da ich die Frist bereits überschritten habe). In Sachen Leistung und Async ist Node weitaus besser als Tornado.


3
2018-04-05 08:04