Skip to content
Create a gist now

Instantly share code, notes, and snippets.

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__)
def index():
return render_template('index.html')
def api():
if request.environ.get('wsgi.websocket'):
ws = request.environ['wsgi.websocket']
while True:
message = ws.wait()
if __name__ == '__main__':
http_server = WSGIServer(('',5000), app, handler_class=WebSocketHandler)
<title>Flask/Gevent WebSocket Test</title>
<script type="text/javascript" src=""></script>
<script type="text/javascript" charset="utf-8">
return false;
if ("WebSocket" in window) {
ws = new WebSocket("ws://" + document.domain + ":5000/api");
ws.onmessage = function (msg) {
} else {
alert("WebSocket not supported");
<form method='POST' action='#'>
<textarea name='data' id="data"></textarea>
<div><input type='submit'></div>
<div id="log"></div>

The wait() method was renamed to receive().


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 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.