- Notifications
You must be signed in to change notification settings - Fork164
[DEPRECATED] Alternative:https://github.com/miguelgrinberg/flask-sock
License
heroku-python/flask-sockets
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Elegant WebSockets for your Flask apps.
Simple usage ofroute
decorator:
fromflaskimportFlaskfromflask_socketsimportSocketsapp=Flask(__name__)sockets=Sockets(app)@sockets.route('/echo')defecho_socket(ws):whilenotws.closed:message=ws.receive()ws.send(message)@app.route('/')defhello():return'Hello World!'if__name__=="__main__":fromgeventimportpywsgifromgeventwebsocket.handlerimportWebSocketHandlerserver=pywsgi.WSGIServer(('',5000),app,handler_class=WebSocketHandler)server.serve_forever()
Usage ofFlask blueprints:
fromflaskimportFlask,Blueprintfromflask_socketsimportSocketshtml=Blueprint(r'html',__name__)ws=Blueprint(r'ws',__name__)@html.route('/')defhello():return'Hello World!'@ws.route('/echo')defecho_socket(socket):whilenotsocket.closed:message=socket.receive()socket.send(message)app=Flask(__name__)sockets=Sockets(app)app.register_blueprint(html,url_prefix=r'/')sockets.register_blueprint(ws,url_prefix=r'/')if__name__=="__main__":fromgeventimportpywsgifromgeventwebsocket.handlerimportWebSocketHandlerserver=pywsgi.WSGIServer(('',5000),app,handler_class=WebSocketHandler)server.serve_forever()
Combining WebSockets with Ajax (XHR) endpoints also comes handy with the support of session handling built-in to sockets as well. As an example you could use an Ajax login call which would create a new session and accordingly set a secure HttpOnly cookie to the browser. After authorization, you can connect to the WebSocket endpoint and reuse the session handling from Flask there as well (as shown here:https://pythonhosted.org/Flask-Session/). Access to other custom cookies is also possible via Flasksrequest.cookies
property.
Serving WebSockets in Python was really difficult. Now it's not.
To install Flask-Sockets, simply:
$ pip install Flask-Sockets
A custom Gunicorn worker is included to make deployment as friendly as possible:
$ gunicorn -k flask_sockets.worker hello:app
Production services are provided bygeventandgevent-websocket.
The given example can run standalone as main.
Anything that insertswsgi.websocket
into the WSGI environ issupported, but gevent-websocket is recommended.
Because the Werkzeug development server cannot provide the WSGI environ witha websocket interface, it is not possible to run a Flask app using the standardapp.run()
.
If you try to, Flask will still try to serve on all the specified routes, andthrow aKeyError
whenever a client tries to connect to a websocket route.
Instead, just use the included gunicorn worker (explained above), or anything thatcan insertwsgi.websocket
into the WSGI environ.
The websocket interface that is passed into your routes isprovided by gevent-websocket.The basic methods are fairly straightforward —send
,receive
,send_frame
, andclose
.
- Add support ofFlask blueprints.
- Add request context into the socket handler.
- Fallback to Flask logic if websocket environment is not available.
- Use Flask routing to allow for variables in URL
- Initial release.
About
[DEPRECATED] Alternative:https://github.com/miguelgrinberg/flask-sock
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors10
Uh oh!
There was an error while loading.Please reload this page.