Updated chat server example to be resilient against broken pipes. Also used a set instead of a list and parameterized the port.

This commit is contained in:
Ryan Williams
2010-03-31 13:14:04 -07:00
parent 737e2e71ae
commit 2d0dc9a269

View File

@@ -1,27 +1,35 @@
import eventlet
from eventlet.green import socket
participants = []
PORT=3001
participants = set()
def read_chat_forever(writer, reader):
line = reader.readline()
while line:
print "Chat:", line.strip()
for p in participants:
if p is not writer: # Don't echo
p.write(line)
p.flush()
try:
if p is not writer: # Don't echo
p.write(line)
p.flush()
except socket.error, e:
# ignore broken pipes, they just mean the participant
# closed its connection already
if e[0] != 32:
raise
line = reader.readline()
participants.remove(writer)
print "Participant left chat."
try:
print "ChatServer starting up on port 3000"
server = eventlet.listen(('0.0.0.0', 3000))
print "ChatServer starting up on port %s" % PORT
server = eventlet.listen(('0.0.0.0', PORT))
while True:
new_connection, address = server.accept()
print "Participant joined chat."
new_writer = new_connection.makefile('w')
participants.append(new_writer)
participants.add(new_writer)
eventlet.spawn_n(read_chat_forever,
new_writer,
new_connection.makefile('r'))