Beliebt

Null-Konfigurations-HTTP-Relay-Server - Netzwerk, Proxy, HTTP, Relay

Ich entwickle ein Desktop-Produkt (C #) mit einemEingebauter Webserver (ServiceStack), der f├╝r die Remoteverwaltung der Datenbank verwendet werden kann - ich bezeichne ihn als internen Server. Viele Benutzer m├Âchten au├čerhalb ihres Netzwerks auf den internen Server zugreifen, aber der Supportaufwand f├╝r die Konfiguration von Firewalls und Portweiterleitung ist zu hoch. Dynamische IP-Adressen k├Ânnen ebenfalls ein Problem sein.

Ich versuche, einen Weg zu finden, um eineZero-Config-Dienst, bei dem ein Benutzer eine Verbindung zu einem externen Server herstellen kann, den ich hoste, der die Anforderungen an den internen Server weiterleiten kann, ohne etwas auf dem internen Dienst konfigurieren zu m├╝ssen. Es sollte aus Sicht des Benutzers "nur funktionieren".

Dies entspricht der Funktionsweise von TeamViewer / AnyDesk / etc, bei der sich der Benutzer einfach anmelden und eine Verbindung zu seinem Computer herstellen kann, ohne Firewalls konfigurieren zu m├╝ssen.

Ich habe einen Proof-of-Concept entwickelt, der auf dem folgenden Sequenzdiagramm basiert. Es funktioniert, aber die Leistung gegen├╝ber der direkten Verbindung ist sehr langsam.

Wie k├Ânnte dies besser erreicht werden, und gibt es L├Âsungen, die dieses Problem sofort gel├Âst haben?

Die in der folgenden Abbildung dargestellte Hauptaufgabe besteht darin, dass der Public Relay Server keine direkte Verbindung zum internen Server herstellen soll.

Sequenzdiagramm

Antworten:

2 f├╝r Antwort Ôäľ 1

M├Âgliche Verbesserungsvorschl├Ąge:

  • Verwenden Sie nach M├Âglichkeit HTTP / 2 zwischen dem Relay und deminterner Server (im Idealfall aber nur ├╝berall). Auf diese Weise k├Ânnen Sie die HTTP / 2-Server-Push-Funktionalit├Ąt nutzen, anstatt eine h├Ąngende Anforderung vom internen Server abrufen oder warten zu m├╝ssen, bis eine neue externe Anforderung eingeht, und eine Reihe weiterer potenzieller Leistungsverbesserungen bereitstellen.
  • Stellen Sie die Kommunikation zwischen dem Client-System herund der Relais / interne Server asynchron. Der Client sendet also eine regul├Ąre Anforderung an den Relay / internen Server, erh├Ąlt eine Antwort, dass diese akzeptiert wurde, und wartet dann auf eine sekund├Ąre Antwort vom Server (entweder ├╝ber die HTTP / 2-Server-Push-Funktionalit├Ąt oder einen anderen Push-Benachrichtigungsmechanismus). . Auf diese Weise k├Ânnen Sie dem Benutzer ein besseres Feedback geben, dass die Anforderung tats├Ąchlich verarbeitet wird. Dies tr├Ągt dazu bei, dass sich die Dinge schneller anf├╝hlen, auch wenn die Leistung dadurch nicht tats├Ąchlich verbessert wird.
  • Senden Sie die Anforderung vom Relais vorab anDer interne Server, wenn Sie den internen Server ├╝ber die Anforderung benachrichtigen. Dadurch wird ein vollst├Ąndiger Roundtrip zwischen dem Relay und dem internen Server vermieden, der die Dinge erheblich beschleunigen d├╝rfte.
  • Verwenden Sie bei der Implementierung des obigen Punkts dasselbe asynchrone Kommunikationsmodell, das ich weiter oben erw├Ąhnt habe, zwischen dem Relay und dem internen Server.
  • Pr├╝fen Sie die Verwendungsm├Âglichkeiten EIS (oder ├Ąhnliches) um ein direktes einzurichtenVerbindung zwischen dem Client und dem internen Server, wann immer dies m├Âglich ist. Ihr gr├Â├čter Leistungsengpass ist hier wirklich der Relay-Server selbst. Wenn Sie die Einstellungen so vornehmen k├Ânnen, dass einige (oder m├Âglicherweise alle) Benutzer nicht anders als beim Verbindungsaufbau mit ihm sprechen m├╝ssen, sollten Sie eine ziemlich gro├če Leistungsverbesserung feststellen .