Added websocket multi-user chat example for Luca Zago's question.
This commit is contained in:
@@ -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
|
||||
|
34
examples/websocket_chat.html
Normal file
34
examples/websocket_chat.html
Normal 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>
|
34
examples/websocket_chat.py
Normal file
34
examples/websocket_chat.py
Normal 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)
|
Reference in New Issue
Block a user