2016-04-07 21 views
1

Ich muss Anfragen vom Server an die Anwendung richten, die auf der Hardware des Benutzers zu Hause ausgeführt wird. Ich kann nicht zulassen, dass die Anwendung die Daten auf den Server überträgt, da ich die Daten nicht speichere, sondern sie an eine Client-orientierte Web-App weiterleiten muss (auch darf ich die Daten nicht auf dem Server speichern). Ich bin mir momentan nicht sicher, wie ich das erreichen kann. Meine einzige Idee ist es, freie Socket-Verbindungen zu haben, wo ich die Anfragen schreiben kann. Dies scheint kompliziert und ich weiß nicht, ob es skalierbar ist (gibt es eine Grenze für offene Socket-Verbindungen? Wie viel Ressourcen vergeuden ungenutzte Verbindungen?). Es ist auch ein bisschen Low-Level, aber ich kann nicht sehen, wie ich http verwenden kann und ich kenne andere geeignete Protokolle nicht.So stellen Sie eine Anfrage vom Server an die Geräte hinter dem Router

Antwort

1

Hier sind einige der verfügbaren Optionen. Ich gehe davon aus, dass das Heimnetzwerk eine typische Heiminstallation ist, bei der eingehende Verbindungen aus dem Internet standardmäßig vom Heimrouter/der Firewall blockiert werden.

Home Anwendungs ​​Umfragen Server

Da die Anwendung im Heimnetzwerk ausgeführt wird eine Verbindung zum Internet heraus kann, können Sie die Verbindung umdrehen, so dass die Anwendung auf dem Heimnetzwerk auf dem zu Ihrem Server verbindet out Internet. Abhängig von der Anwendung und den Anforderungen kann die Home-Anwendung eine einfache HTTP-Verbindung zu Ihrem Server herstellen, einmal pro Tag, einmal pro Stunde, einmal alle 5 Minuten usw. Je nach Situation. Wenn der Server nichts für die Home-Anwendung hat, gibt er nur eine einfache Antwort zurück, dass er keine Daten hat. Wenn der Server über einige Daten für die Anwendung zu Hause verfügt, gibt es nur die Daten zurück, wenn die eingehende Anforderung eingeht.

Der Hauptnachteil dieses Schemas ist, dass der Server warten muss, bis das nächste Abfrageintervall des Clients, bevor es liefern kann Daten an den Kunden.

Home Anwendungs ​​Anschluss WebSocket oder socket.io Verbindung der Server

Auch die Heimanwendung mit dem Server verbindet, aber dieses Mal schafft sie eine WebSocket oder Socket.io Verbindung. Diese Verbindung kann dann so lange offen gehalten werden, wie Sie möchten. Sobald diese Verbindung geöffnet ist, kann der Server die Clientdaten jederzeit senden. Wenn die Verbindung zu irgendeinem Zeitpunkt unterbrochen wird, baut der Client einfach eine neue Verbindung auf. Dies kostet auf der Client-Seite ziemlich viel und auf dem Server eine sehr kleine Menge an Ressourcen (ein wenig Speicher pro Verbindung).

Richtig konfigurierte Server können Hunderttausende simultaner WebSocket-Verbindungen verarbeiten. Speziell konfigurierte Server können sogar Millionen von Verbindungen bewältigen.

offenes Loch in Home-Router/Firewall

In diesem Fall wird der Home-Router/Firewall "Portweiterleitung" eingehende Anfragen auf einen bestimmten Port (wahrscheinlich nicht Port 80) in die Ausgangs Anwendung konfiguriert ist. In diesem Fall muss die Home-Anwendung zuvor ihre IP-Adresse beim Server registriert haben und den Home-Router/die Firewall ordnungsgemäß konfiguriert haben, um einen direkten Zugriff auf einen bestimmten Port für die Home-Anwendung zu ermöglichen. Sobald dies alles richtig konfiguriert ist, kann der Server eine direkte Verbindung zur Home-Anwendung herstellen.

Da regelmäßige Endbenutzer häufig Schwierigkeiten haben, den Router/die Firewall so zu konfigurieren, dass dieser Zugriff und die Fehlerbehebung schwierig sind, ist dies keine sehr häufig gewählte Option.

Hybrid Polling

Es gibt auch einen Hybrid-Ansatz, bei dem der home-Client regelmäßig ein UDP-Paket an den Server sendet. Dieses UDP-Paket bewirkt, dass der Home-Router/die Firewall einen Rückpfad von demselben Server zurück zum Home-Client öffnet. Dieser Rückweg bleibt für einige Zeit offen und während dieses Zeitintervalls kann der Server ein UDP-Paket an den Client senden, und der Router/die Firewall lässt ihn ein. Dies ist eine Herleitung eines Schemas, das von einigen Peer-to-Peer-Systemen verwendet wird. Peer-Protokolle, um durch Home-Router/Firewalls zu gelangen. Da dies UDP, nicht TCP ist, sind die Clients/Server für ihre eigene Lieferzuverlässigkeit verantwortlich.

+0

danke für diese Übersicht. Bei einigen Aufrufen speichere ich Metadaten, aber andere könnten direkt auf das Gerät gehen. Gibt es eine Methode, um direkt eine Verbindung zwischen dem Webbrowser des Clients und dem Gerät herzustellen? Offenes Loch ist leider nicht möglich. Wenn die Antwort für einen Kommentar nicht in Frage kommt, kann ich eine neue Frage stellen. – Leander

+0

@Leander - Wenn es sich bei der Client-Anwendung um einen Webbrowser handelt (der in Ihrer Frage nicht angegeben wurde), können Sie nur HTTP von Client zu Server oder webSocket von Client zu Server abrufen. – jfriend00

+0

ok, ich habe das schon erwartet;) – Leander

Verwandte Themen