Skip to content

Instantly share code, notes, and snippets.

@lrvick
Created September 1, 2011 07:17
Show Gist options
  • Save lrvick/1185629 to your computer and use it in GitHub Desktop.
Save lrvick/1185629 to your computer and use it in GitHub Desktop.
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>
@rolurq
Copy link

rolurq commented Sep 23, 2016

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

@Daniet
Copy link

Daniet commented Jan 27, 2019

get messenger of cliente use ws.receive()

@Zaniyar
Copy link

Zaniyar commented Jan 16, 2020

how could I set cross_origin="*" for the websocket?

@saban248
Copy link

@Zaniyer need public address

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment