Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 25d4aa5

Browse files
author
zeekay
committed
More elaborate chat example with backlog.
1 parent 9d70b9f commit 25d4aa5

File tree

3 files changed

+37
-22
lines changed

3 files changed

+37
-22
lines changed

examples/chat-gevent/chat.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
#!/usr/bin/env python
2+
from collections import deque
23
from flask import Flask, render_template
34
from flask.ext.uwsgi_websocket import GeventWebSocket
45

56
app = Flask(__name__)
67
ws = GeventWebSocket(app)
78

89
users = {}
10+
backlog = deque(maxlen=10)
911

1012
@app.route('/')
1113
def index():
@@ -15,9 +17,13 @@ def index():
1517
def chat(ws):
1618
users[ws.id] = ws
1719

20+
for msg in backlog:
21+
ws.send(msg)
22+
1823
while True:
1924
msg = ws.receive()
2025
if msg is not None:
26+
backlog.append(msg)
2127
for id in users:
2228
if id != ws.id:
2329
users[id].send(msg)

examples/chat-gevent/templates/index.html

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,34 @@
1010
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
1111
<script>
1212
$(document).ready(function() {
13-
if (!window.WebSocket) {
14-
if (window.MozWebSocket) {
15-
window.WebSocket = window.MozWebSocket;
16-
} else {
17-
$('#messages').append("<li>Your browser doesn't support WebSockets.</li>");
18-
}
19-
}
20-
ws = new WebSocket('ws://127.0.0.1:5000/websocket');
21-
ws.onopen = function(evt) {
22-
$('#messages').append('<li>Connected to chat.</li>');
23-
}
24-
ws.onmessage = function(evt) {
25-
$('#messages').append('<li>' + evt.data + '</li>');
26-
}
27-
$('#send-message').submit(function() {
28-
ws.send($('#name').val() + ": " + $('#message').val());
29-
$('#message').val('').focus();
30-
return false;
31-
});
13+
function showMessage(message) {
14+
$('#messages').append('<li>' + message)
15+
}
16+
17+
if (!window.WebSocket) {
18+
if (window.MozWebSocket) {
19+
window.WebSocket = window.MozWebSocket;
20+
} else {
21+
showMessage("Your browser doesn't support WebSockets")
22+
}
23+
}
24+
25+
var ws = new WebSocket('ws://127.0.0.1:5000/websocket');
26+
ws.onopen = function(evt) {
27+
showMessage('Connected to chat.')
28+
}
29+
30+
ws.onmessage = function(evt) {
31+
showMessage(evt.data)
32+
}
33+
34+
$('#send-message').submit(function() {
35+
var message = $('#name').val() + ": " + $('#message').val();
36+
showMessage(message)
37+
ws.send(message);
38+
// $('#message').val('').focus();
39+
return false;
40+
});
3241
});
3342
</script>
3443
</head>

flask_uwsgi_websocket/_gevent.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ def __call__(self, environ, start_response):
4545

4646
# setup events
4747
send_event = Event()
48-
send_queue = Queue()
48+
send_queue = Queue(maxsize=1)
4949

5050
recv_event = Event()
51-
recv_queue = Queue()
51+
recv_queue = Queue(maxsize=1)
5252

5353
# create websocket client
5454
client = self.client(uwsgi.connection_fd(), send_event, send_queue, recv_event, recv_queue)
@@ -74,9 +74,9 @@ def listener(client):
7474

7575
# handle send events
7676
if send_event.is_set():
77-
send_event.clear()
7877
try:
7978
uwsgi.websocket_send(send_queue.get())
79+
send_event.clear()
8080
except IOError:
8181
client.connected = False
8282

0 commit comments

Comments
 (0)