Urheberrechtserklärung: Dieser Artikel ist ein Originalartikel, bitte beim Nachdruck angeben
Der vorherige Artikel befasst sich hauptsächlich mit der Serialisierung und Analyse des Protobuf-Byte-Streams und der Serialisierung von Protobuf-Objekten in Wörter Obwohl Es kann direkt nach der Drosselung übertragen werden. Es ist tatsächlich unmöglich, nur den Protobuf-Byte-Stream im Projekt zu übertragen, da es bei der TCP-Kommunikation des Sockets mehrere sehr häufige Probleme gibt, nämlich Sticky-Pakete und fehlende Pakete. Die sogenannten Sticky-Pakete bedeuten einfach, dass der Socket mehrere kleinere Pakete zusammenführt und gemeinsam versendet. Da TCP verbindungsorientiert ist, verwendet das sendende Ende eine Optimierungsmethode (Nagle-Algorithmus), um mehrere Daten mit kleinen Intervallen und kleinem Datenvolumen zu einem großen Datenblock zusammenzuführen, um mehrere Pakete effizienter an das empfangende Ende zu senden . Fehlende Pakete bedeuten, dass Socket unvollständige Pakete an den Empfänger sendet, nachdem der Pufferbereich voll ist (nach meinem Verständnis sind Sticky-Pakete und fehlende Pakete tatsächlich ein Problem). Auf diese Weise kann es sich bei den vom Empfänger gleichzeitig empfangenen Daten um mehrere Pakete handeln. Um dieses Problem zu lösen, muss vor dem Senden der Daten die Länge des Pakets angegeben werden. Daher sollte die Struktur des Pakets aus Nachrichtenlänge + Nachrichteninhalt bestehen.
In diesem Artikel sprechen wir über das Datenspleißen. Hier finden Sie nützliche Informationen.
Das erste Spleißdatenpaket, das in der verwendet wird Code Das ByteBuffer-Tool wird in Java bereitgestellt, jedoch nicht in C#. Der Autor hat jedoch keine Methode zum Abrufen aller Bytecodes im Tool hinzugefügt, daher hat er eine GetBytes()-Methode hinzugefügt >
1 |
|
1 |
|
Empfangene Daten Die Sequenz besteht darin, zuerst die Nachrichtenlänge zu empfangen und dann die Nachricht mit der angegebenen Länge entsprechend der Nachrichtenlänge zu empfangen
1 2 |
|
Die GetBytesRecive-Methode wird verwendet Empfangen Sie die Nachricht und lösen Sie die Probleme mit klebrigen und fehlenden Paketen.
1 |
|
Wie wir alle wissen, kann die Anzeige auf der Benutzeroberfläche von Unity nur im Hauptthread ausgeführt werden. Wenn wir jedoch weiterhin Nachrichten im Hauptthread empfangen und senden, wird die Erfahrung äußerst schlecht sein, sodass wir sie öffnen müssen Ein weiterer Thread ist für das Empfangen und Senden von Nachrichten verantwortlich. Der nächste Artikel befasst sich mit der Verwendung von Multithreading zur Vervollständigung der Socket-Kommunikation
1 |
|
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen für die Socket-Übertragung von Protobuf-Byte-Streams. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!