© saicle/Shutterstock.com
PHP Magazin
Echtzeitanwendungen mit Node.js entwickeln

Just in (Real-)Time

Node.js hebt die JavaScript-Entwicklung auf ein neues Level und sorgt dafür, dass der Einsatz von JavaScript nicht mehr länger für die Verwendung auf Clients beschränkt bleibt. Wie sich mithilfe von Node.js hochperformante Webanwendungen entwickeln lassen, die gleichzeitig noch eine einfache Möglichkeit zur Echtzeitkommunikation bieten und welche Tools dafür zur Verfügung stehen, zeigt der folgende Artikel.

Kevin Gerndt


Node.js, Socket.IO and Knockout - a hybrid architecture

JavaScript ist sicherlich jedem Webentwickler ein Begriff. Die meisten werden wohl an den Einsatz auf Webseiten denken – an Code, der clientseitig im Browser ausgeführt wird, um Manipulationen am Document Object Model (DOM) vorzunehmen oder Daten asynchron mittels Technologien wie AJAX nachzuladen. Lange Zeit waren genau diese Anwendungsszenarien das Kerngebiet von JavaScript. Bei JavaScript handelt es sich aber mittlerweile nicht mehr nur um eine reine Clienttechnologie. Node.js bringt frischen Wind in die JavaScript-Welt und ermöglicht es, hochperformanten serverseitigen Code für den Betrieb von Netzwerkanwendungen zu entwickeln. Damit lassen sich insbesondere Webserver realisieren, die eine große Anzahl gleichzeitig bestehender Netzwerkverbindungen bei einem relativ geringen Ressourcenverbrauch ermöglichen. Bei Node.js handelt es sich um einen Prozess, der die JavaScript-Engine V8 hostet, die ebenfalls im Browser Google Chrome zum Einsatz kommt. V8 ist in der Programmiersprache C/C++ entwickelt und unterstützt die x86- und ARM-Hardwarearchitektur sowie Mehrkernprozessoren. Der große Vorteil dieser Engine liegt in der ressourcensparenden Architektur sowie der extrem performanten Ausführung von Code, durch Technologien wie Inline-Caching und der exakten Speicherbereinigung, bei der jeweils nur kleine Teile des Arbeitsspeichers beansprucht und wieder freigegeben werden. Die Ausführung von Node.js erfolgt in einem einzigen Thread, was zur Folge hat, dass jeweils nur ein Kommando zur gleichen Zeit ausgeführt werden kann. Dieser Ansatz erlaubt zunächst keine Parallelisierung, ist aber bewusst gewählt, da durch den Einsatz von Multi-Threading Aspekte, wie zum Beispiel die Threadsicherheit, berücksichtigt werden müssen, was die Entwicklung verkompliziert. Auch die Fehlersuche gestaltet sich bei dieser Art der Programmierung schwieriger, da bestimmte Arten von Fehlern nur bei einer bestimmten Konstellation und zeitlichen Abfolge von abhängigen Threads auftreten. Abbildung 1 veranschaulicht anhand eines Dateisystemzugriffs, wie Node. js dennoch in der Lage ist, Aktionen parallel abzuarbeiten.

Abb. 1: Eventloop

Ein Dateisystemzugriff ist ein praktisches Beispiel für das Blockieren eines Threads, da im Normalfall erst mit der Datei gearbeitet werden kann, wenn diese vollständig eingelesen ist. Zunächst soll die Datei text.txt durch den Aufruf der Funktion fs.createReadStream("text.txt", callBack); eing...

PHP Magazin
Echtzeitanwendungen mit Node.js entwickeln

Just in (Real-)Time

Node.js hebt die JavaScript-Entwicklung auf ein neues Level und sorgt dafür, dass der Einsatz von JavaScript nicht mehr länger für die Verwendung auf Clients beschränkt bleibt. Wie sich mithilfe von Node.js hochperformante Webanwendungen entwickeln lassen, die gleichzeitig noch eine einfache Möglichkeit zur Echtzeitkommunikation bieten und welche Tools dafür zur Verfügung stehen, zeigt der folgende Artikel.

Kevin Gerndt


Node.js, Socket.IO and Knockout - a hybrid architecture

JavaScript ist sicherlich jedem Webentwickler ein Begriff. Die meisten werden wohl an den Einsatz auf Webseiten denken – an Code, der clientseitig im Browser ausgeführt wird, um Manipulationen am Document Object Model (DOM) vorzunehmen oder Daten asynchron mittels Technologien wie AJAX nachzuladen. Lange Zeit waren genau diese Anwendungsszenarien das Kerngebiet von JavaScript. Bei JavaScript handelt es sich aber mittlerweile nicht mehr nur um eine reine Clienttechnologie. Node.js bringt frischen Wind in die JavaScript-Welt und ermöglicht es, hochperformanten serverseitigen Code für den Betrieb von Netzwerkanwendungen zu entwickeln. Damit lassen sich insbesondere Webserver realisieren, die eine große Anzahl gleichzeitig bestehender Netzwerkverbindungen bei einem relativ geringen Ressourcenverbrauch ermöglichen. Bei Node.js handelt es sich um einen Prozess, der die JavaScript-Engine V8 hostet, die ebenfalls im Browser Google Chrome zum Einsatz kommt. V8 ist in der Programmiersprache C/C++ entwickelt und unterstützt die x86- und ARM-Hardwarearchitektur sowie Mehrkernprozessoren. Der große Vorteil dieser Engine liegt in der ressourcensparenden Architektur sowie der extrem performanten Ausführung von Code, durch Technologien wie Inline-Caching und der exakten Speicherbereinigung, bei der jeweils nur kleine Teile des Arbeitsspeichers beansprucht und wieder freigegeben werden. Die Ausführung von Node.js erfolgt in einem einzigen Thread, was zur Folge hat, dass jeweils nur ein Kommando zur gleichen Zeit ausgeführt werden kann. Dieser Ansatz erlaubt zunächst keine Parallelisierung, ist aber bewusst gewählt, da durch den Einsatz von Multi-Threading Aspekte, wie zum Beispiel die Threadsicherheit, berücksichtigt werden müssen, was die Entwicklung verkompliziert. Auch die Fehlersuche gestaltet sich bei dieser Art der Programmierung schwieriger, da bestimmte Arten von Fehlern nur bei einer bestimmten Konstellation und zeitlichen Abfolge von abhängigen Threads auftreten. Abbildung 1 veranschaulicht anhand eines Dateisystemzugriffs, wie Node. js dennoch in der Lage ist, Aktionen parallel abzuarbeiten.

Abb. 1: Eventloop

Ein Dateisystemzugriff ist ein praktisches Beispiel für das Blockieren eines Threads, da im Normalfall erst mit der Datei gearbeitet werden kann, wenn diese vollständig eingelesen ist. Zunächst soll die Datei text.txt durch den Aufruf der Funktion fs.createReadStream("text.txt", callBack); eing...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang