Frage

Ich habe eine einfache C # Anwendung, die UDP-Multicast in einem Single-Empfänger, Single-Sender Szenario verwendet. Das Ziel ist, die Nachrichtenübermittlung so schnell wie möglich in einer lokalen Netzwerk-Umgebung zu erhalten.

Ich habe verwendet SocketAsyncEventArgs / SendAsync / ReceiveAsync, Begin / BeginReceive, Themen / Senden / Empfangen, und haben versucht, beide PGM und UDP-Multicast.

Jede Implementierung Versuch funktioniert für wiederholte Nachrichtenübermittlung bis zu etwa 1000 Nachrichten mit lokalen Sende OK, lokale empfängt. Danach beginnt die Leistung exponentiell abfällt. Wo 1000 Meldungen ein paar Hundertstelsekunden dauern, 10.000 Nachrichten könnten überall von 2 bis 10 Sekunden dauern.

Hat jemand Erfahrung in High-Performance-UDP / PGM-Multicasting? Was ist der beste Entwurf maximalen Durchsatz zu bekommen?

Aktualisieren

Im Moment ist es nur ein einziges Programm lokal ausgeführt - 1 Anwendung mit 1 Sender und 1 Empfänger. Die Test-Meldungen sind 4 Bytes.

War es hilfreich?

Lösung

Versuchen Sie Buchse des Sende- oder Empfangspuffer (Server oder Client) groß genug, so dass die Menge des Verkehrs, die Sie beschäftigen sich mit erwarten aufzunehmen. Hier einige Beispiele-C # -Code aus meinem eigenen UDP-Multicast-Server / Client auf dem Server, wo dataSock mein Socket an die UDP-Multicast-Gruppe gebunden ist:

dataSock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, (NumberOfPackets * PacketSize) + SmallEpsilonForExtraHeadroom);

Auch sicher sein, und stellen Sie SocketOptionName.SendBuffer auf Ihrer Client-Seite, um die Puffergröße entsprechen Ihre Server produzieren.

Ich würde auch empfehlen, wenn Sie nicht bereits bekannt ist, sind Ihr Paket zu machen Größen von weniger als der MTU. Standardmäßig werden MTUs auf 1500 Bytes festgelegt. (MTU ist die maximale Übertragungseinheit-Größe)

Sie können immer noch Pakete erhalten fallen gelassen, wenn Sie auch Ihre Senderate drosseln, um Ihre Kunden stellen Sie sicher halten können. Ihre Netzwerk-Hardware ist höchstwahrscheinlich nicht der Engpass hier. Sehen Sie meine Frage in Mikrosekunde Verzögerung benötigen. NET app für dieses Problem UDP-Multicast-Übertragungsrate für eine Antwort Drosselung (unter Verwendung von Stopwatch in einer while-Schleife für die Verzögerungen in der Größenordnung von Mikrosekunden).

Andere Tipps

Ich bin kein Experte auf diesem, aber es klingt wie Ihr gegen die Kapazität Ihres Netzwerks stoßen auf. Möglicherweise müssen Sie Ihre Hardware aktualisieren besseren Durchsatz zu erhalten. Aber ohne die Größe der Pakete, zu wissen, die Netzwerk-Bandbreite, oder wie viele Maschinen versuchen, zu kommunizieren, usw., das ist nur eine Vermutung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top