Für welche Use Cases ist die Library eig. geeignet?
Game Services, MMOs usw.?
Reflection ist was Performance angeht, ja ziemlich teuer.
Für MMOs vermutlich nicht gut skalierbar. Für jede Verbindung werden mehrere Threads erstellt und so etwas wie "Hot-Swapping" zwischen Servern wird noch nicht unterstützt. Sonst RTT befindet sich unter 5ms für kleine Pakete. (Client Code -> Network Lib -> Cloud -> Network Lib -> Server Code) Sehr performant und leicht zu verwenden. (Objektorientiert, Eventbasierend, Async etc.) Prinzipiell kannst du die Lib überall verwenden. Ausschließen würde ich sofort große File-Transitions. Auch wird SSL (noch) nicht unterstützt. D.h sollte die Anwendung empfindliche Informationen transferieren, wäre diese Lib wohl auch eine schlechte Wahl.
Bin gerade erst bewusst über Deinen Thread hier gestolpert. Lustig ist, dass ich seit einiger Zeit auch eine Netzwerkbibliothek für mein Spiel baue. Allerdings verwende ich ProtocolBuffers und Qt als Basis. So wie ich das sehe ist mein Overhead identisch zu Deinem (16bit+32bit). Danach folgt der Datenbereich. Lediglich die Programmiersprache ist bei mir C++.
Am meisten hat mir das Auflösen des im Datenbereich enthaltenen Typs bereitet. Ganz zufriedenstellend und generisch konnte ich das auch nicht lösen. Aber manchmal muss man halt auch in gewisser Weise pragmatisch bleiben.
Außerdem ist Deine Lib wesentlich weiter was Funktionen angeht. Auf UDP hab ich z.B. verzichtet. Bin mal gespannt wie das bei Dir weitergeht und ob ich es jemals hinkriege meinen ersten Applikationsserver fertigzustellen
Auf jeden Fall für Dein Projekt.
Bezüglich der Typen Auflösung. Prinzipiell ist für beide Seiten ein Typ unbekannt. Sendet der Client oder Server ein Paket eines unbekannten Typs, wird zuvor noch Informationen über den "neuen" Typen ausgetauscht. Quasi: "Hey, neue Klasse aus der Assembly 1.0.0.0 NetworkLib mit der UID 0xF1". Somit sind beide konsistent und UIDs können per Laufzeit festgelegt werden. D.h wer meine Library verwendet, sendet wirklich seine Objekte und kümmert sich nicht um UIDs. (Keine Konstanten, Attribute oder sonstige statische Mappings) Vielen Dank
Wünsche dir auch viel Erfolg
Hast du einen Link zur deiner Lib? Falls ich mal eine C++ Network Lib benötige könnte ich darauf zurück greifen