Chat system
Kragen Sitaker
kragen at dnaco.net
Wed Mar 15 22:07:14 EST 2000
In article <EoSz4.206$vb.113 at newsfeed.slurp.net>,
Chris Armstrong <punck at SpamIsBadPenguinPowered.com> wrote:
>So to make the problem simple: I just need to get a bunch of the
>same program running on the same box to do IRC-like chat. I know
>things like ytalk do this, but I figured I'd post my problem here before
>messing with some C code that I don't understand.
>I've thought about having a file that
>is written to and is read by all clients, but this is *really* inefficient.
>Another thing about the chat system: I need for it to be able to constantly
>stream in new content while still being able to type in your message and
>send it whenever you want. I know some programs like IRC clients do
>this without having two processes (one for the streaming content and
>one for the input). Oh, and one more thing, this'll all be using curses,
>if it matters.
You want event-loop-based multiplexing. I think there's something
called 'asyncore' in the Python distribution.
The event-loop idea is that your program consists of the following:
while 1:
e = get_next_event()
handle_event(e)
Here get_next_event is a magical function that returns the next thing
that has happened: generally input on some socket. handle_event does
the appropriate thing with e; in a chat system, you'll want to write a
copy of part of what was read to every output socket (or at least a
subset of them).
This necessarily means that all of your clients are connected to the
same process in some sense; you could do it in your current
architecture (which I understand is one process per player) by having
all the game processes talk to all the others, or having them connected
in some more complex way (such as a hypercube), but you'll probably
prefer a star topology.
If you write get_next_event yourself instead of using asyncore, it will
probably use the select function.
Hope this helps. I have example code I'd be happy to give you (a toy
chat server), but it's in C :)
--
<kragen at pobox.com> Kragen Sitaker <http://www.pobox.com/~kragen/>
The Internet stock bubble didn't burst on 1999-11-08. Hurrah!
<URL:http://www.pobox.com/~kragen/bubble.html>
The power didn't go out on 2000-01-01 either. :)
More information about the Python-list
mailing list