Why should I use Zoidcom instead of doing it myself?
Because it saves you time. Time better invested in developing your game, instead of technology.
Zoidcom is the result of longtime research and experience in network programming. While it is easy to work through a socket tutorial and have some basic communications going after half an hour, you still haven't any of the features Zoidcom provides. As a matter of fact, the low level socket code was the last thing implemented into Zoidcom after developing and testing the rest of the system for nearly two years, and that was only the first release.
So it is not just a basic socket wrapper, it is a high-level library taking care of a lot of tasks you will inescapably face if the multiplayer support for your project shall be any good.
Why should I save bandwidth?
First, bandwidth costs money. If you plan to host servers for your game, bandwidth usage directly relates to the price of the hosting. Second, players hosting servers at home often have very tight upstream bandwidth. A game that needs less bandwidth per player allows these people to host games for more players. Third, by not sending redundant data it is possible to send more relevant data, ultimately enabling you to provide a richer simulation with more or more complex objects.
How does it save bandwidth?
Smart object replication
At the uppermost level, Zoidcom saves bandwidth by not sending redundant information. The application can inform Zoidcom how relevant each object is to each client, and in accordance to that, Zoidcom will not send updates about irrelevant objects to clients.
Smart data synchronization
When objects need to be replicated to a client, there is no need to always send the full object state for an update. Instead, Zoidcom detects which variables of an object changed, and only updates these.
At the lowest level, bandwidth is saved by using bitstreams. A bitstream is a series of bits, and as such allows Zoidcom to make effective use of every single bit in a packet. When a bool is sent, it occuppies only one single bit in the packet. Likewise, numeric values can be stripped down to the necessary number of bits to transmit them. If an object value will never exceed 100, it can be transmitted by using seven bits instead of eight. Make that ten such objects replicated to sixteen clients, fifteen times a second, the total savings are 300 bytes/second, for one single stripped bit.
What happens if bandwidth gets tight despite the savings?
In that case, Zoidcom's priority system kicks in. What is done basically is that objects have several priorities, depending on their type and how important they are for a specific client. If bandwidth gets tight, objects with higher priority simply get more updates than others. I.e. the player itself is updated with every packet, but other players far away only two times a second. Priorities have to be assigned by the application of course, Zoidcom has no way of knowing how much importance one object has over another.