Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Apr 29, 2022. It is now read-only.

[DEPRECATED] Alternative:https://github.com/miguelgrinberg/flask-sock

License

NotificationsYou must be signed in to change notification settings

heroku-python/flask-sockets

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Elegant WebSockets for your Flask apps.

http://farm4.staticflickr.com/3689/9755961864_577e32a106_c.jpg

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.

Installation

To install Flask-Sockets, simply:

$ pip install Flask-Sockets

Deployment

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.

Development / Testing

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.

WebSocket Interface

The websocket interface that is passed into your routes isprovided by gevent-websocket.The basic methods are fairly straightforward —send,receive,send_frame, andclose.

Release History

v0.2.1

v0.2.0

  • 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

v0.1.0

  • Initial release.

About

[DEPRECATED] Alternative:https://github.com/miguelgrinberg/flask-sock

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors10

Languages


[8]ページ先頭

©2009-2025 Movatter.jp