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.
|
implementation.
|
||||||
|
|
||||||
.. literalinclude:: ../examples/websocket.py
|
.. 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