Fair enough… you asked for thoughts…
So, as to your approach, the problem with a straight-up UDP approach that does not worry about contiguous frames, reliability, etc. is that packets will drop randomly. So one object may be seen to move while another staggers, etc…
Each of your per-object messages is already pretty huge. 7 floats + a string + serializer overhead for the object hierarchy. Going to be at least 60+ bytes for the average message, once per object, once per frame. The per-message UDP overhead is also going to be 28 bytes… so every object is taking up 88+ bytes of network x times per second depending on your frame rate.
…Strings are also not a great way to identify objects.
Given that your message sizes will vary, it makes it even more likely that some specific object will get messages and some others won’t.
For reference, SimEthereal uses a semi-reliable UDP transport where the client and the server keep track of a “known good state”. Only the deltas from the known good state are sent and they are packed tightly into single messages if possible. (It can send updates for about 80 active objects in one 1400 byte message or several hundred objects if they aren’t moving). It breaks up frames automatically if there are more objects moving than can fit in one standard MTU message size (we’d prefer to break up the messages ourselves versus making the IP transport do it).
In addition, it keeps track of which objects are within local view range and only sends updates for those objects.
A fully working non-ES (non-EntitySystem) demo can be found here:
An ES version can be found here:
They are basically space ship games without the game. You can login and fly space ships around and see your friends and their spaceships. (“Spaceship!”)