I have looked at this. Main pro-TCP argument there is PPP header compression (in addition to reliability which is obvious). If you would like to send hundreds of small messages per second it would probably matter. But for packed stuff it is not so important. Not to mention that more and more people are using cable models/etc - in which it is TCP/IP which has bigger header size.
I would suggest checking out:
[…]
When we ran some diagnostics we discovered that we were seeing some simply unbelievable latencies. 5 and 10 seconds was frequent, and we saw some as long as 50 seconds!
[…]
TCP is evil. Don’t use TCP for a game. You would rather spend the rest of your life watching Titanic over and over in a theater full of 13 year old girls.
[…]
[…]
We originally designed Fireteam around TCP/IP because it’s a reliable transport protocol for network traffic. […] As soon as we started doing real Internet tests, we realized that we needed to start sending some packets unreliably via UDP.
[…]
both TCP/IP and UDP. We initially labored under the idea that only one protocol should be used for the sake of simplicity, but it’s best to use the appropriate tool for each job.
[…]
[…]
Until a reliable transport protocol with predictable delivery is available over the Internet, simulations with timecritical delivery requirements will continue to use unreliable protocols, such as User Datagram Protocol (UDP).
[…]
These people have tried TCP/IP and later changed to UDP, at least for some data. I really do not think that they were not apt at TCP programming - it just that this protocol does not work for realtime games.
As for Jeff’s experience with TCP. Were these 4 modem connections really far away ? Something like over the ocean ? Or was it more or less local test, with people divided by <8 reliable hops ? It is possible that in this situation, there was just no noticeable packet loss - and indeed in this case, TCP can win. But real world does not work in this way.
I think that game designer just voted with their feet. How many real-time games do you know, which use only TCP ? I know that UT, quake and NWN all use UDP (NWN would probably manage to live with TCP, but they still decided to use UDP).
Now, there is a question, if TCP should be used as backing protocol, for non-important data. But this is not very important now - I would like to focus on how to implement realtime, move/fire/kill part of game.