Ich entwickle einen TCP-Proxy, der vor einen TCP-Dienst gestellt wird, der zwischen 500 und 1000 aktive Verbindungen aus dem wilden Internet verarbeiten soll.Wie langsam sind TCP-Sockets im Vergleich zu Named Pipes unter Windows für localhost IPC?
Der Proxy läuft auf demselben Computer wie der Dienst und ist größtenteils transparent. Der Dienst ist dem Proxy im Allgemeinen nicht bewusst, die einzige Ausnahme ist die Benachrichtigung der realen Remote-IP-Adresse der Clients.
Dies bedeutet, dass es für jeden eingehenden offenen TCP-Socket zwei weitere Sockets auf dem Server gibt: das zweite des Paars im Proxy und das auf dem echten Dienst hinter dem Proxy.
Die Größen send und recv für die beiden Proxy-Sockets sind auf 1024 Bytes eingestellt.
Was sind die Auswirkungen auf die Leistung? Wie langsam ist diese Konfiguration? Sollte ich mich bemühen, den Dienst zu ändern, um Named Pipes (oder einen anderen IPC-Mechanismus) zu verwenden, oder ist ein TCP-Socket von localhost zum größten Teil ein effizienter IPC?
Die Zusammenführung der beiden Apps ist keine Option. Im Moment sind wir bei den beiden Prozesskonfigurationen festgefahren.
EDIT: Der Grund für zwei separate Prozess auf der gleichen Hardware ist 100% Wirtschaftlichkeit. Wir haben nur einen Server, und wir haben nicht vor, mehr (kein Geld) zu bekommen.
Der TCP-Dienst ist eine ältere Software in Visual Basic 6, die unsere Erwartungen übertraf. Der Proxy ist C++. Wir haben nicht die Zeit, das Geld oder die Arbeitskraft, um den VB6-Code in eine moderne Programmierumgebung umzuschreiben und zu migrieren.
Der Proxy ist unser Versuch, ein bestimmtes Leistungsproblem auf dem Dienst zu beheben, eine DDoS attack, die wir von Zeit zu Zeit erhalten.
Der Proxy ist Open Source, and here is the project source code.
Eine In-Host-TCP-Verbindung wird so effizient wie möglich implementiert (lesen: als bidirektionale lokale Pipe oder etwas ähnliches) auf jedem modernen Netzwerk-Stack ist es wert, so würde ich überrascht sein (und ein wenig enttäuscht von Microsoft), wenn es einen merklichen Leistungsunterschied zwischen TCP und Named Pipes für diesen Anwendungsfall gab. –
@JeremyFriesner Ich stimme dir zu, ich würde gerne davon ausgehen, dass das auf "Windows Server 2008" der Fall ist. – vz0