Skip to content

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Simple Websocket echo client/server with Flask and gevent / gevent-websocket
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/api')
def api():
if request.environ.get('wsgi.websocket'):
ws = request.environ['wsgi.websocket']
while True:
message = ws.wait()
ws.send(message)
return
if __name__ == '__main__':
http_server = WSGIServer(('',5000), app, handler_class=WebSocketHandler)
http_server.serve_forever()
<!DOCTYPE HTML>
<html>
<head>
<title>Flask/Gevent Websocket Test</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
<script type="text/javascript" charset="utf-8">
$(document).ready(function(){
$('form').submit(function(event){
ws.send($('#data').val())
return false;
});
if ("WebSocket" in window) {
ws = new WebSocket("ws://" + document.domain + ":5000/api");
ws.onmessage = function (msg) {
$("#log").append("<p>"+msg.data+"</p>")
};
} else {
alert("WebSocket not supported");
}
});
</script>
</head>
<body>
<h1>Send:</h1>
<form method='POST' action='#'>
<textarea name='data' id="data"></textarea>
<div><input type='submit'></div>
</form>
<h1>Receive:</h1>
<div id="log"></div>
</body>
</html>
@kilonet

The wait() method was renamed to receive(). http://www.gelens.org/code/gevent-websocket/

@stephenbez

Something that tripped me up:
Make sure to put the "index.html" file inside a folder called "templates". If you put it next to flask_geventwebsocket_example.py flask won't find it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.