Added websocket multi-user chat example for Luca Zago's question.

This commit is contained in:
Ryan Williams
2010-08-13 11:45:56 -07:00
parent 74d1ceaa06
commit a462dd4dbc
3 changed files with 78 additions and 0 deletions

View File

@@ -94,3 +94,13 @@ This exercises some of the features of the websocket server
implementation.
.. literalinclude:: ../examples/websocket.py
.. _websocket_chat_example:
Websocket Multi-User Chat Example
--------------------------
``examples/websocket_chat.py``
This is a mashup of the websocket example and the multi-user chat example, showing how you can do the same sorts of things with websockets that you can do with regular sockets.
.. literalinclude:: ../examples/websocket_chat.py

View File

@@ -0,0 +1,34 @@
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
window.onload = function() {
var data = {};
var s = new WebSocket("ws://127.0.0.1:7000/chat");
s.onopen = function() {
s.send('New participant joined');
};
s.onmessage = function(e) {
$("#chat").append("<div>" + e.data + "</div>");
};
$('#chatform').submit(function (evt) {
var line = $('#chatform [type=text]').val()
$('#chatform [type=text]').val('')
s.send(line);
return false;
});
};
</script>
</head>
<body>
<h3>Chat!</h3>
<p>(Only tested in Chrome)</p>
<div id="chat" style="width: 60em; height: 20em; overflow:auto; border: 1px solid black">
</div>
<form id="chatform">
<input type="text" />
<input type="submit" />
</form>
</body>
</html>

View File

@@ -0,0 +1,34 @@
import eventlet
from eventlet import wsgi
from eventlet import websocket
participants = set()
@websocket.WebSocketWSGI
def handle(ws):
participants.add(ws)
try:
while True:
m = ws.wait()
if m is None:
break
for p in participants:
p.send(m)
finally:
participants.remove(ws)
def dispatch(environ, start_response):
"""Resolves to the web page or the websocket depending on the path."""
if environ['PATH_INFO'] == '/chat':
return handle(environ, start_response)
else:
start_response('200 OK', [('content-type', 'text/html')])
return [open(os.path.join(
os.path.dirname(__file__),
'websocket_chat.html')).read()]
if __name__ == "__main__":
# run an example app from the command line
listener = eventlet.listen(('127.0.0.1', 7000))
print "\nVisit http://localhost:7000/ in your websocket-capable browser.\n"
wsgi.server(listener, dispatch)