Jump to content
Unity Insider Forum

Wie baue ich Fehlertolleranz beim Networking ein?


Kokujou

Recommended Posts

Zu meinem Projekt: Ich benutze den matchmaker eigentlich nur zum Aufbau der Verbindung danach kommuniziere ich nur noch über Nachrichten, also recht lowlevel.

Jetzt habe ich aber sowohl beim Aufbau der Verbindung als auch beim Senden der Nachrichten das Gefühl, dass das nicht immer so hinhaut, wie ich mir das denke. Besonders auf meinem Smartphone. Dort baut er keine Verbindung auf, obwohl der Server brav horcht oder Nachrichten kommen nicht an.

Das blöde ist noch dazu dass ich keine Fehlermeldungen vom Handy kriege. Ich weiß das ging mal, dass man im Editor auch übers Netzwerk Logs empfangen konnte aber ich weiß echt nicht mehr wie.

Ich gehe davon aus dass die Verbindung über WLAN nicht so gut ist und deswegen irgendwann Nachrichten nicht ankommen, viel zu häufig eigentlich.

Lange Rede kurzer Sinn: Wie kann ich das verhindern? Muss ich jetzt solange dieselbe Nachricht senden, bis ich TCP-Mäßig ein Ping zurückkriege a la "Nachricht erhalten"?

Die konkreten Funktionen mit denen ich Arbeite sind NetworkServer.SendToAll und NetworkClient.Send

Link zu diesem Kommentar
Auf anderen Seiten teilen

Würde mal zu Mirror wechseln, was ja in Discord auch genannt wurde, da UNet bald veraltet ist und nicht weiter entwickelt wird: https://forum.unity.com/threads/mirror-networking-for-unity-unet-replacement.425437/

Zu logs.. such einfach mal Console script oder so für Unity. Da gibt es so fertig dinger wo man die console anzeigen lassen kann im Spiel und dann siehst du was passiert ist. Ansonsten adb.exe funktionen googlen und damit vom handy die outputs zu applications sehen kannst. Man kann da unity rausfiltern, damit man es angenehmer hat.

Am 10.1.2019 um 13:16 schrieb runner78:

UNET verwendet UDP, nicht TCP (bei Multiplayer üblich). UDP ist schneller, allerdings kann es zu Packetverlusten kommen.

Große Spiele wie World of Warcraft sollen angeblich TCP benutzen. Auch angeblich Minecraft soll TCP benutzen.

UDP hat ja mit heuten Technologie die Vorteile wie bei TCP eigentlich, weil ja sowas wie reliable gibt, dennoch wird TCP immer noch ab und zu gerne benutzt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 21 Stunden schrieb MaZy:

Große Spiele wie World of Warcraft sollen angeblich TCP benutzen. Auch angeblich Minecraft soll TCP benutzen.

Bei WoW wird glaube ich beides verwendet.

Bei TCP wird sichergestellt, dass Daten-Pakete in der richtigen Reihe auch wirklich ankommen. Das beuteutet auch, das der Server warten muss bis der Empfänger zurückgibt das das Paket gekommen ist, und im schlimmsten Fall das Paket nochmals senden, wenn es verloren geht. Dadurch entsteht eine nicht unerhebliche Zeitverzögerung. TCP hat auch einen größeren Header und braucht deshalb auch mehr Bandbreite.
UDP schickt einfach die Pakete ohne sicherzustellen ob und in welcher Reihenfolge die Pakete ankommen. Z.B. bei Spielerpositionen kann es auch mal egal sein wenn mal ein Paket verloren geht. Während bei TCP der Server das mittlerweile veraltete Paket nochmal schicken muss, hat bei bei UDP der Client vermutlich bereite aktuellere Pakete erhalten.

TCP macht dann Sinn wenn Performance keine Rolle spielt, und man Sicher gehen will, dass die Daten auch ankommen, z.B beim Senden von Benutzereingaben zum Server.

Beim FPS Example wird übrigens beim Senden von Benutzerangaben auch die Versionsummer des letzten empfangenen Paketes mitgesendet, somit weiß der Server wann der User eine Aktion ausgeführt hat und passt die Server Simulation Rückwirkend an.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...