On Thu, Feb 21, 2008 at 6:25 PM, Austin Wood <[EMAIL PROTECTED]> wrote:
>
>  On Fri, Feb 22, 2008 at 6:40 AM, Nathan <[EMAIL PROTECTED]> wrote:
>  >
>  >  On Thu, Feb 21, 2008 at 9:00 AM, Drew Smathers <[EMAIL PROTECTED]> wrote:
>  >  >
>  >  >  On Thu, Feb 21, 2008 at 10:50 AM, Nathan <[EMAIL PROTECTED]> wrote:
>
> >  >  >  My initial implementation uses the built-in socket module, but I 
> > can't
>  >  >  >  find a way to flush the socket!  Any suggestions for a simple way 
> for
>  >  >  >  fast communications, or a way to make sockets work fast?  (right 
> now,
>  >  >  >  the sockets seem to just wait about 2 seconds, and then transmit,
>  >  >  >  which is rather funny to watch, but not very playable).
>  >  >  >
>  >  >
>  >  >  Just use Twisted.  Then you might actually come close to the "simple"
>  >  >  objective.    Nonetheless, you might want to google TCP_NODELAY for
>  >  >  your particular problem.
>  >
>  >  Twisted and "simple" have nothing to do with each other in my
>  >  experience.  I even bought the Twisted book, but I have a really hard
>  >  time getting into it (not to mention that the developers seem to live
>  >  on the opposite side of the world and have odd attitudes when you
>  >  start asking them questions).  I really don't want to deal with a
>  >  completely separate event loop.  I'd also like to avoid external
>  >  dependencies where possible.  (Right now I only depend on python
>  >  itself and pyglet)
>  >
>  >  I'm researching the TCP_NODELAY option, which looks promising, but
>  >  there's a curious lack of explanation of those types of flags and how
>  >  to use the on http://docs.python.org/lib/module-socket.html  --- I
>  >  suppose they assume you'll come with socket knowledge from C.
>
>  The socket module in Python is a direct copy of the C (POSIX) socket
>  API (modulo struct sizes). So they do assume you have socket knowledge
>  from C.
>
>  If you want low-latency you'll need to use UDP instead of TCP (that
>  is, SOCK_DGRAM instead of SOCK_STREAM).
>  TCP is a reliable two-way communication protocol so packets are
>  guaranteed to reach the other host *in order*.
>  UDP is connectionless and one-way (iirc)
>  TCP is slow because, basically, 2 reasons;
>   1- Every packet received needs an ACKnowledgement sent back.
>   2- Nagle's algorithm which delays tiny packets to increase throughput
>  (but increases latency)

Which is what TCP_NODELAY is for (2).

>  To use UDP properly you'll need to write a networking layer that can
>  deal with dropped and out-of-order packets.

And to make a long story short, you will fail miserably at this like
thousands of other programmers who heard UDP is super-duper fast and
thought it would be *fun* to make a real-time networked game based on
UDP.  Or you will succeed only partially with an implementation that
completely sucks and works slower than TCP.  Either way, you will
spend a lot of time debugging the UDP side of your application and
have little time leftover to have fun writing your game.

Assuming you want to maintain your sanity, just stick to TCP.

Cheers,
-- 
\\\\\/\"/\\\\\\\\\\\
\\\\/ // //\/\\\\\\\
\\\/ \\// /\ \/\\\\
\\/ /\/ / /\/ /\ \\\
\/ / /\/ /\ /\\\ \\
/ /\\\ /\\\ \\\\\/\
\/\\\\\/\\\\\/\\\\\\
 d.p.s

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"pyglet-users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pyglet-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to