2016-07-31 23 views
0

Ich lerne Erlang und versuche zu verstehen, wie seine Sockets funktionieren, da es einer der stärksten Teile der Sprache und OTP sein soll.Sockets Server mit Erlang vs. anderen gemacht

Ich habe Erfahrung mit NodeJS und frage mich, wie sich die mit NodeJS und Erlang erstellten Anwendungen in Bezug auf die Verwaltung von Verbindungen mit mehreren Sockets unterscheiden.

Wie ich verstehe, während JavaScript Single-Threaded ist, verwaltet V8 alle mehrere gleichzeitige Verbindungen für es, obwohl Erlang mehrere Verbindungen selbst verwalten kann.

Also frage ich mich, wenn Erlang hervorragende Unterstützung für die Verwaltung mehrerer Verbindungen auf einmal hat, wie unterscheidet es sich von anderen Technologien für einen Programmierer? Ich meine, wenn ich eine App für NodeJS schreibe, kann es so viele Verbindungen offen und gut verwaltet haben, als ob ich Code in Erlang geschrieben hätte, oder?

Bitte teilen Sie Ihre Gedanken, Links zu einigen Artikeln über die Spezialitäten von Erlang in diesem Zusammenhang sind auch willkommen.

Antwort

1

Ich bin keineswegs ein Experte in Erlang, aber ich denke, ich kenne Erlang und NodeJs auf dem gleichen Niveau.

Die Dinge, die Sie sagen, sind alle korrekt. Bot kann mehrere Verbindungen sehr effizient verwalten, gut verwaltet, sagen Sie.

Aber die Sache ist, die Probleme sind nicht nur mehrere gleichzeitige Verbindungen zu behandeln. Die Probleme, die Erlang sehr gut zu lösen versucht, sind Sicherheit und Verteilung. Ich denke NodeJs werden nicht so gut darin sein, wie es jetzt ist.

Nicht falsch verstehen, ich sage nicht, dass niemand eine verteilte Anwendung in NodeJs codieren kann, aber in Anbetracht der Werkzeuge, die Erlang Ihnen gibt, ist es vielleicht eine bessere Wahl.

Für die Fehlersicherheit, zum Beispiel, lässt Erlang Ihre Prozesse verlinken, so dass bei einem Fehler andere auch fehlschlagen oder benachrichtigt werden. Das ist nicht sehr praktisch, aber wenn Sie es neben supervisors und shared-nothing-Prozesse betrachten, ist es ein großartiges Werkzeug.

Für die Verteilung, Erlang lassen Sie Knoten miteinander verknüpfen. Verknüpfte Knoten können miteinander kommunizieren, als wären sie auf derselben Maschine, und sie können Prozesse auch auf anderer Seite erzeugen. Berücksichtigen Sie dies mit der Möglichkeit, eine fehlgeschlagene Anwendung von einem fehlerhaften Knoten auf einem anderen fehlerfreien Knoten zu starten. Gibt Ihnen eine großartige Verfügbarkeit.

Und nicht zu vergessen, dass diese Werkzeuge jahrelange Erfahrung haben.

Versuchen Sie einfach, diese Probleme in einem anderen Ökosystem zu lösen. Ich sage Ökosystem, weil Erlang als Sprache nicht vollständig ist, aber die Werkzeuge und Frameworks (meistens OTP) müssen auch berücksichtigt werden. Dann kann man auch sagen, dass Erlang in diesen Bereichen wirklich glänzt.

Aber Erlang ist auch nicht sehr gut, wenn es um lineare Verarbeitung, Zahlenverarbeitung, Bild-/Tonverarbeitung usw. geht. Das wäre besser in einem anderen System implementiert.

Ich denke, in diesen Bereichen ist der große Unterschied zwischen NodeJs und Erlang ihr Laufzeitmodell. NodeJs hat einen Prozess, einen Thread, der bei io-bezogenen Aufgaben async arbeitet. Natürlich können Sie mehrere Prozesse ausführen, aber das ist die grundlegende Sache. Auf der anderen Seite hat Erlang eine VM namens BEAM. Erlang verwendet spezielle Prozesse innerhalb dieser VM, sehr leichte Prozesse. BEAM plant sie selbst, da es sich nicht um OS-Prozesse handelt. Dies gibt BEAM den Vorteil, mehrere hunderttausend Prozesse gleichzeitig zu haben, die jeweils eine Aufgabe erledigen, sei es nun oder anderswo.

Sie sehen den Unterschied jetzt, denke ich. Erlang ist mehr kampferprobt, besser, wenn Ausfallsicherheit oder Verteilung ein Muss ist. NodeJs sind vielleicht besser, wenn Sie eine schnellere Entwicklung und Bereitstellung benötigen.