2016-07-12 12 views
-1

Ich baue eine Chat-Anwendung, bei der jeder Tastendruck des Benutzers an den Server gesendet wird. Auf dem Server generiert eine Empfehlungs-Engine, die auf nlp basiert, Empfehlungen basierend auf dem Kontext der eingegebenen Nachricht zu diesem Zeitpunkt.TCP vs UDP für Echtzeit-Chat-Empfehlung-Engine?

Für die Bereitstellung im großen Maßstab wäre der Verbindungstyp zwischen TCP und UDP vorzuziehen. UDP ist schnell, aber unzuverlässig, während TCP, das zuverlässig ist, in Echtzeit langsam sein kann. Beispiel: Ein Benutzer tippt die Wörter "Hey, lasst uns sehen" und löscht schnell die Textbox, die Empfehlung eines Films sollte nicht generiert werden, nachdem er die Textbox gelöscht hat.

Wenn der Server eine Empfehlung hat, sollte die Empfehlung an den Client zurückgegeben werden.

Ziel ist es, Echtzeitempfehlungen mit geringer Latenz zu erhalten. Welcher Typ wäre vorzuziehen?

+0

Wenn es um die Interaktion mit einer menschlichen Schreibkraft/Leser geht, ist der Unterschied in der Latenz ein strittiger Punkt. –

Antwort

0

TCP und UDP sind fast identisch, wenn die Größe der zu einem Zeitpunkt gesendeten Daten geringer ist als die maximale Nutzlast eines einzelnen Frames.

In diesem Fall wird UDP in Bezug auf das Echtzeitverhalten "zuverlässiger" sein, da es eher in Ihren Händen liegt, wie die Daten verarbeitet werden. Der Nachteil ist natürlich, dass Sie sich selbst um bestimmte Dinge kümmern müssen, die TCP Ihnen kostenlos zur Verfügung stellt.

Mit TCP auf der anderen Seite kann die TCP-Schicht des Protokollstacks Ihre Echtzeitanforderungen durcheinander bringen, und Sie haben nicht einmal eine Chance, etwas dagegen zu tun. Haben Sie jemals über Neu-Übertragungen nachgedacht (ca. + 200ms Sendezeit), Nagle-Algorithmus (kleine Pakete sind um bis zu 200ms verzögert), verzögerte TCP-ACKs (kann bei einigen Stacks Neuübertragungen verursachen)? Und es gibt viel mehr auf Lager für Sie, wenn Sie echte Echtzeitanforderungen haben.

Ich arbeite an einem Projekt, das einen 20ms Zeitrahmen hat und in dieser Zeit eine Menge Daten über TCP überträgt. Obwohl wir eine Star-Architektur und Echtzeit-Betriebssysteme haben, ist es eine Hölle, diese Funktion zuverlässig zu machen (viele Effekte sind auf einen unserer verwendeten Ethernet-Chips zurückzuführen, die smsc91c111).

Abschließend gibt es keinen "besten Weg", Dinge wie diese zu tun, da weder UDP noch TCP Echtzeitprotokolle sind. Aber da es ziemlich einfach ist, zwischen ihnen zu wechseln, empfehle ich einfach, es zu testen und das Protokoll zu wählen, das am besten funktioniert.

+0

Kein Benutzer wird in einer Chat-Anwendung eine Latenz von 20 ms bemerken. –

+0

@RonMaupin Ja, das stimmt, aber 200ms sind bemerkbar. Die 20ms ist nur ein Beispiel und eine Chat-Anwendung wird nicht so strenge Echtzeit-Anforderungen haben, wie ich in meinem Projekt habe. –

+0

Echtzeit VoIP ist in Ordnung, bis über 250 ms. Ich kann einfach nicht sehen, dass jemand eine Nachricht eingeben, auf eine Antwort warten kann, und bemerken, dass das Netzwerk die Antwort um 200 ms verzögerte, wenn es viel länger dauert, als die andere Partei zu lesen, und dann einen einzelnen Buchstaben eintippt. –