Original Post
I'm currently investigating the possibility of improving my game's resiliency against packet loss using the specific method of introducing redundancy into the game network stream. Some of the game messages are so important (and latency sensitive) that I can very little afford to lose them, or wait for a retransmit. Just recently, I have found two sources that simply recommend duplicating these game messages over the span of several UDP datagrams. See Drilian's House of Game Development: 2009.06.03 - Networking Is Hard (Part 3): "Eventually, I decided to send packets in the Reliable way, but not In-Order. But, to minimize the amount that the game has to wait for resent packets to arrive, each packet contains eight frames worth of input/collision data. That way, as long as one out of every string of 8 packets arrives, the server will have all of the relevant information to sync up to that point." and Gamasutra: The Internet Sucks: Or, What I Learned Coding X-Wing vs. TIE Fighter: "... Our solution was simple and surprisingly effective. Every packet would send copy of the last packet. This way if a packet were dropped, a copy of it would arrive with the next packet, and we could continue on our merry way. This would require nearly twice as much bandwidth, but fortunately our system required so little bandwidth that this was acceptable." But somehow, this whole idea of adding redundancy seems, well, redundant and wasteful. As a result, in my mind I've started to think of more sophisticated schemes of adaptively controlling the amount of redundancy, but I'm not sure if I'd even want to go there. So, I'm asking what do you think? Are you aware of any other sources that discuss this topic? Can you think if there's a "clearly superior" alternative to this? Do you think this is a simple hack, or a viable method? Thanks for the thoughts,