Socket.io

Ich hatte im Urlaub ein bisschen Zeit und habe es endlich geschafft Websockets auszuprobieren. Wenn man damit etwas bauen will, stößt man zwangsläufig auf Socket.IO, das einem viel Arbeit abnimmt und man muss das Rad ja nicht immer neu erfinden.

Bei Websockets reagiert der Server nicht nur auf Anfragen des Clients mit einer Aktion, sonder kann selbst auch ungefragt mit dem Client kommunizieren. Bei einem Chat z.B. schickt der Server automatisch neue Nachrichten an alle über den Socket verbundenen Clients. Würde man das auf herkömmlichem Wege bauen, müsste der Client permanent beim Server nachfragen ob neue Nachrichten eingegangen sind, was natürlich wenig Sinn macht und haufenweise unnötigen Traffic erzeugt.
Mehr Infos zur Theorie hinter Websockets findet ihr hier: https://de.wikipedia.org/wiki/WebSocket

Ich habe mit Socket.IO in kurzer Zeit einen Gruppen Chat auf Basis von Node und express gebaut. Da lässt sich natürlich noch viel verbessern und ich werde noch weiter daran schrauben.
Für den Anfang und die eingesetzte Zeit, ist es aber schon mal nicht schlecht, finde ich: http://mcw-group-chat.herokuapp.com

Bei Socket.io benötigt man 2 wesentliche Bestandteile. Zum einen eine serverseitige Bibliothek für Node.js (npm) und zum anderen eine clientseitige Bibliothek die beim Client, also im Browser des Benutzers, läuft. Eine genaue Anleitung findet man auf der offiziellen Seite: https://socket.io/

Eigentlich wollte ich das Projekt auf Firebase deployen, bin dann aber doch bei Heroku gelandet. Da man bei Websockets einen Server benötigt, der seinen Zustand behält und nicht, dank serverless Functions, nach jeder Anfrage bei Null anfängt, war das denke ich die beste Wahl und außerdem kostenlos.
Bei Heroku deployed man in einen so genannten Dyno, das ist eine Art leichtgewichtiger Container. Man muss sich nicht um die Container Einrichtung kümmern, daher war das für mich im Moment auch die erste Wahl.
Wichtig bei Heroku ist, dass nach einer bestimmten Zeit der Inaktivität der Container pausiert wird und erst beim erneuten Zugriff neu startet. Falls man Daten speichert im Dyno, gehen diese wie bei einem Docker Container verloren! Der Neustart ist natürlich nur bei der Gratis Variante normal. Persistente Daten sollte man ja aber eh nicht innerhalb eines Containers speichern.

Das Deployment auf Heroku, ist wirklich einfach. Man nutzt dafür Git und die Heroku CLI. Nach dem Git für das Verzeichnis initialisiert wurde, wird mit der CLI (heroku create) ein neues Projekt auf Heroku angelegt und als Remote Repo hinzugefügt. Man muss dann nur noch seine Änderungen committen und ins Remote Repo auf Heroku pushen (git push heroku master). Abhängigkeiten werden automatisch installiert beim Deployment und die Änderungen sind je nach Größe in Sekunden online.

Auch mit Firebase lässt sich so eine Chat Anwendung natürlich umsetzen, dann aber direkt mit einer Datenbank (Firestore), Functions und ohne Socket.io. Hier werden zwar auch Websockets verwendet, aber Firestore hat mit Firestore Listeners, eine eigene Lösung dafür parat.
Ich habe bei der Suche nach einem Hosting eine sehr gute Anleitung zum deployen von Node Apps als serverless Functions gefunden (Video hier), die vielleicht jemandem hilft.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert