NetDynamics ist ein datenorientierter Netzwerkspielplatz für zuverlässige UDP-Transporte. Die Anwendung wurde für Stresstests und das Debuggen einer proprietären Netzwerkbibliothek erstellt, unterstützt aber auch ENet als Open-Source-Alternative.
NetDynamics ermöglicht die Erzeugung von bis zu 100.000 dynamischen Entitäten, die effiziente Verarbeitung von Daten und das Rendern von Grafiken mithilfe von Draw-Call-Batching. Die Anwendung generiert eine große Datenmenge für die Übertragung über ein Netzwerk oder auf Loopback mithilfe des UDP-Transports, der eine sequenzielle zuverlässige/unzuverlässige Nachrichtenzustellung unterstützt. Das Hauptziel besteht darin, problematische Stellen, Engpässe oder Fehler in einem Netzwerktransport zu ermitteln und in Echtzeit zu visualisieren.
Der Gesamtansatz basiert auf dem Entity Component System, bei dem eine Entität lediglich ein Bezeichner ist, der von Daten und Logik entkoppelt ist. NetDynamics ist eine Client-Server-Anwendung, die die visuelle Darstellung von Entitäten über Verbindungen hinweg synchronisiert. Der Server serialisiert und überträgt große Mengen an Komponenten an Clients, bei denen es sich im Wesentlichen um Daten der Entität handelt. Die Systeme werden für die Logik und die Verarbeitung von Komponenten für bestimmte Entitäten verwendet.
Der Server hat die volle Autorität über alle Entitäten, Clients können nur durch das Senden einer entsprechenden Nachricht an der Bevölkerung einer Welt teilnehmen. Der Server kann auch Entitäten erzeugen und sie durch weitere Synchronisierung zwischen Clients auch lokal zerstören. Der Server sendet Statusaktualisierungen für Entitäten in einem festen Intervall (standardmäßig 20 Aktualisierungen pro Sekunde). Kunden verwenden Interpolation, um die fließende Bewegung von Entitäten zwischen Zustandsaktualisierungen basierend auf den Positions- und Geschwindigkeitskomponenten zu reproduzieren. Da keine Extrapolation implementiert ist, ist ein Paketverlust spürbar.
Die Anwendung ist darauf ausgelegt, exponentiell Datenverkehr mit Hunderttausenden Netzwerknachrichten zu generieren. Es ist nicht beabsichtigt, bei Multithreading einen Leistungsabfall des Hauptthreads zu bemerken, wenn ein Netzwerktransport unter hoher Auslastung steht. Daher wird ein Singlethreaded-Transport abhängig von der Framerate der Anwendung immer mit höheren Latenzen ausgeführt. Das Verschieben der Transportlogik in einen separaten dedizierten Thread oder die Framerate-Unabhängigkeit auf andere Weise wird dieses Problem lösen, aber das geht über den Zweck von NetDynamics hinaus.
Laden Sie die Anwendung herunter und stellen Sie die gewünschten Parameter in der Datei settings.ini
ein. Führen Sie die Anwendung aus, verwenden Sie die linke Maustaste auf dem Server oder Client, um Entitäten zu erzeugen, und verwenden Sie die rechte Maustaste auf dem Server, um Entitäten zu zerstören.
Um die Rendering- und Verarbeitungsleistung einer ersten Anwendung zu testen und einen visuellen Unterschied im Verbrauch einer Frame-Zeit durch die Netzwerklogik zu erhalten, können Sie einfach Entitäten auf dem Server ohne Verbindungen erzeugen.