WebSocket support for Flask
Project description
flask-sock
WebSocket support for Flask (and possibly other WSGI frameworks). What makes this package different than other WebSocket servers is that it does not require a greenlet based server (gevent, eventlet) to work.
This WebSocket implementation is compatible with the following synchronous web servers:
- Werkzeug (Flask's development web server)
- Gunicorn with the
gthreadworker
In addition to the servers above, the following asynchronous web servers are supported when the Python standard library is monkey patched:
- Eventlet's WSGI server
- Gevent's WSGI server
- Gunicorn with the
eventletworker - Gunicorn with the
geventworker
Installation
pip install flask-sock
Example
from flask import Flask, render_template
from flask_sock import Sock
app = Flask(__name__)
sock = Sock(app)
@sock.route('/echo')
def echo(ws):
while True:
data = ws.receive()
ws.send(data)
Running
To run an application that uses this package, you need to use a supported web server.
Running with Werkzeug
Werkzeug supports WebSocket routing in version 2, which at this time hasn't been officially released. You can install a supported release candidate with the following command:
pip install "werkzeug>=2.0.0rc3"
To run your application use the normal method that you always use. Both the
flask run and app.run() methods of starting the Flask application should
work.
Running with Gunicorn
To use this package with Gunicorn you need to keep in mind that each active
WebSocket client will use up a worker. The most practical way to run a
WebSocket server is to use the --threads option to allocate the number of
clients that you need:
gunicorn -b :5000 --threads 100 module:app
It is also okay to use multiple workers, each with a number of allocated threads:
gunicorn -b :5000 --workers 4 --threads 100 module:app
Running with eventlet
To serve your application with the eventlet WSGI server you can use the following script:
import eventlet
eventlet.monkey_patch()
from eventlet import wsgi
from module import app
wsgi.server(eventlet.listen(('', 5000)), app)
It is also possible to use Gunicorn's eventlet worker:
gunicorn -b :5000 --worker-class eventlet module:app
Gunicorn's eventlet worker handles a maximum of 1000 concurrent requests in a
single worker process by default. The maximum number of concurrent requests
can be changed with the --worker-connections option. The number of workers
can be changed with the --workers option.
Running with gevent
To serve your application with the gevent WSGI server you can use the following script:
from gevent import monkey
monkey.patch_all()
from gevent.pywsgi import WSGIServer
from module import app
WSGIServer(('127.0.0.1', 5000), app).serve_forever()
It is also possible to use Gunicorn's gevent worker:
gunicorn -b :5000 --worker-class gevent module:app
Gunicorn's gevent worker handles a maximum of 1000 concurrent requests in a
single worker process by default. The maximum number of concurrent requests
can be changed with the --worker-connections option. The number of workers
can be changed with the --workers option.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flask-sock-0.3.0.tar.gz.
File metadata
- Download URL: flask-sock-0.3.0.tar.gz
- Upload date:
- Size: 4.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.8.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa468d392c8de84c8d9423da4d8ae8bb7c8fc7b2d7ebd6b3e48536998743ef43
|
|
| MD5 |
a75b7cbc4c3e83c15f0b5da6d129222b
|
|
| BLAKE2b-256 |
858b2dd9929fedaebc1761a95391651cb9429653a6275c9db902fcc807c65adb
|
File details
Details for the file flask_sock-0.3.0-py3-none-any.whl.
File metadata
- Download URL: flask_sock-0.3.0-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.8.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9355d8b144fed1309cea6653d678aa777bbfc2e44ae7a5a767fe15281f115b35
|
|
| MD5 |
ec6e0bb584ca6b794149ea787405cad0
|
|
| BLAKE2b-256 |
3cd008dcf953238babf96de3e0a1a624ba9bbd88761cd6449bdb42bd97cb734c
|