[OLPC-Games] [pygame] Re: PyQNet project on Launchpad

Casey Duncan casey at pandora.com
Mon Jul 28 19:46:10 EDT 2008


On Jul 28, 2008, at 4:49 PM, Noah Kantrowitz wrote:
>>> [..]
>> https://coderanger.net/svn/school/2007/fall/egd/magnoball/ 
>> pygamenet.py
>>> . Also a WiP.
>> PyQNet is split over 8 modules, but the actual number of code-lines  
>> in
>> the library (excluding the tests) is pretty small (640 incl. comments
>> and docstrings), pygamenet is around 591 when you take out the
>> comments.  Though PyQNet is likely to grow substantially once I get  
>> all
>> the features I want implemented.
>>
>> The difference in size currently is likely because PyQNet is
>> implemented
>> as UDP with ordering and retry controlled by the Python code  
>> instead of
>> using TCP-level operations.  The UDP operations should allow us to  
>> code
>> adaptations into the library to optimize for low-latency game-y
>> operation.
>
> This is a common misconception. The reason to use UDP is not for low- 
> latency
> (just set TCP_NODELAY), but to accommodate lossy links. Generally  
> this means
> dealing with either bad connections or high congestion. And when I  
> say "deal
> with" I mean "detect and die", not just reimplementing  
> retransmission on top
> of UDP. As it stands there is no real reason to use UDP for games  
> anymore
> unless you really think the vast majority of your users will be on bad
> connections. I don't think this is the case, even for OLPC (sat  
> links are
> slow, but generally not lossy).

TCP has many semantics that can be undesirable for some games, in  
particular "guaranteed delivery" regardless of effective time of  
transmission. In many real-time applications (FPS games come to mind),  
state data becomes out of date very quickly, thus if the transmission  
cannot be completed in a particular time window, it is better not to  
receive the data at all. In these games the state updates can become  
roughly like a stream.

UDP has a lower overhead than TCP, making it advantageous for sending  
streaming data where intermittent loss is preferable to indeterminate  
data lag.

That said, using TCP is more user-friendly and "intuitive" as it has a  
higher level of abstraction as a protocol. But the trade-off -- as is  
always the case with abstraction -- is less direct control.

-Casey


More information about the Games mailing list