Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
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

This comment has been minimized.

Copy link

kilonet commented Mar 13, 2012

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

@stephenbez

This comment has been minimized.

Copy link

stephenbez commented Aug 13, 2013

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.

@mmohansmp

This comment has been minimized.

Copy link

mmohansmp commented Apr 2, 2016

semi colon is missing in index.html : line 9

@rolurq

This comment has been minimized.

Copy link

rolurq commented Sep 23, 2016

Is there a way to achieve the same without the while True?

@Daniet

This comment has been minimized.

Copy link

Daniet commented Jan 27, 2019

get messenger of cliente use ws.receive()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.