Nginx Relay für Websockets (für Messdaten)

  • Thread starter Thread starter Deleted member 11740
  • Start date Start date


D

Deleted member 11740

Guest
Ich arbeite derzeit an einem Projekt, dass von einem Radar Transceiver Messdaten aufnimmt und dann weiterleitet. Die Datensätze bestehen aus den Rohdaten, Timestamp, Auflösung, Compass-Daten und dem Status, welche als JSON gesendet werden. Die Clientanwendung ist mit Javascript programmiert worden. Da diese Anwendung Websockets benötigt (UDP wäre ja zu einfach), muss der Server auf der embedded Hardware jede Verbindung einzeln managen. Das mache ich bereits mit tornado in python.

Es teilt sich in zwei Bereiche auf: Control und Daten

Um das Radar zu steuern benötigt jeder Client natürlich individuellen Zugriff, was über eine REST-API geschieht. Das verbraucht aber kaum Ressourcen.

Die Roh-Daten empfangen alle verbundenen Clients und sind gleich. Da auf der Hardware recht begrenzte Ressourcen verfügbar sind, komme ich ab 5 Clients schnell an die Grenze der CPU.

Wir haben bereits einen fertigen Relay-Server, der nur eine Verbindung zum Websocket aufbaut und diese dann an alle verbundenen Clients weiterleitet.

Dieser Relay-Server muss dann aber auf einer externen Hardware laufen.

Gibt es ein fertiges Modul für den Nginx, das als Relay-Server arbeitet. Bitte nicht mit einem Proxy verwechseln. Der reicht die Verbindungen nur durch, was an dem Problem nichts ändern würde. Ich bin auch offen für andere Tools, die sowas können. Wichtig ist mir, dass es sehr perfomant ist.

Bis jetzt habe ich das hier gefunden:
https://github.com/ronelliott/node-websocket-relay

Wenn jemand noch eine andere Anwendung/Modul kennt, wäre ich sehr dankbar. Ich gehe mal von aus, dass ein in C geschriebenes Modul weniger Ressourcen verbraucht als Javascript, was aber schon perfomanter als Python ist.

PS: Habe gerade gesehen, dass node-websocket http to Websocket ist *grml*.
 
Last edited by a moderator:
Gibt es ein fertiges Modul für den Nginx, das als Relay-Server arbeitet. Bitte nicht mit einem Proxy verwechseln. Der reicht die Verbindungen nur durch, was an dem Problem nichts ändern würde. Ich bin auch offen für andere Tools, die sowas können. Wichtig ist mir, dass es sehr perfomant ist.
Kann dir deine Frage zwar nicht direkt beantworten, aber das Projekt klingt so, als wollte man da nicht unbedingt mit Websockets direkt bis ins Backend durch.

Ich würde einen HTTP-Handler bauen, der die Websockets mit erledigt und die Kommunikation mit dem Backend auf der Basis von Message-Queues a la ZeroMQ erledigen. Das geht fix und entlastet dein Backend vom HTTP-Handling. Obendrein kannst du im Zweifel HTTP-Handling und Messwert-Verarbeitung auf verschiedene Hosts separieren.
 
Nginx kann zwar afaik über Module Websockets verwalten (und nicht nur proxyen) aber seine Architektur sieht einzelne HTTP-Anfragen vor weshalb die Flexibilität stark eingeschränkt ist.
Hingegen kann Node von sich aus Websockets verarbeiten und deshalb leicht erweitern - weswegen ich Node vorziehen würde.
 
Ich hab es noch nicht mit node getestet. Sind Unterschiede der Performance (python tornado <> node.js) bekannt? Ich hab noch nie was mit Javascript gemacht. Mittlerweile habe ich node schon installiert.

Ich werde nochmal Rücksprache mit dem GUI-Programmierer halten. Der wird mir das Passende wahrscheinlich in 5 Minuten hinzaubern :-)

Ggf. werd ich den ganzen Websocket-Kram auslagern und die Daten über einen Socket an die Anwendung schicken.
 
Back
Top