2009-06-04 10 views
0

Ich versuche, eine einfache Möglichkeit, die Zuverlässigkeit für UDP-Nachrichten zu behandeln. Ich dachte mir, ich würde einfach jeden mit einer Sequenzierungs-ID senden und durch Vergleich der ID mit der zuvor empfangenen ID kann ein Verlust festgestellt werden. Ich würde normalerweise nur Ganzzahlen verwenden, aber die Idee, dass es einfach unendlich weiter inkrementieren würde, hat nicht mit mir gesessen.Sequenz-ID für die Handhabung Zuverlässigkeit

Ich könnte Base64 verwenden, aber das würde es nur ein wenig lesbarer machen, aber löst wirklich nichts.

Ich dachte auch, einen Datumsstempel vorzuschlagen, aber das wäre irgendwie schlampig, wenn man Nachrichten um Mitternacht behandelt.

Ich habe das Gefühl, dass es eine bessere Lösung geben muss, die jemand vorschlagen könnte, auch wenn das nur bei Ganzzahlen bleiben soll.

Antwort

1

Meine Präferenz für diesen speziellen Job ist die Verwendung einer inkrementierenden (mindestens 64-Bit) Integer-Sequenz, die mit einem hochauflösenden Zeitstempel versehen ist. Auf diese Weise wird selbst dann, wenn ein Zustandverlust am sendenden Ende vorliegt, wenn die Sequenz von der Zeit neu ausgesät wird, sie aller Wahrscheinlichkeit nach einfach vorwärts springen. Jedes Jahr 10K Bugs, die dies einführen könnte, sind als Übung für Lazarus Long übrig. :-)

Denken Sie daran, dass Sequenz-Gap-Erkennung im Wesentlichen eine Optimierung ist. Das sendende Ende muss erneut übertragen werden, bis eine Bestätigung empfangen wird, wobei eine Nack (für eine Lücke oder ein beschädigtes Datagramm) einfach eine frühere Neuübertragung auslöst. (ZMODEM ist eine seltene Ausnahme von dieser Regel, deren Standardbetriebsart die Verwendung eines einzelnen Ack am Ende des Streams und aller anderen Neusendungen ist, die durch Nacks gesteuert werden; als Dateiübertragungsprotokoll ist es jedoch im Wesentlichen ein Riese mehrteiliges Datagramm.)

Verwandte Themen