Supported web servers¶
This extension can be used to create Flask routes that handle WebSocket requests when used with Werkzeug, Gunicorn, Eventlet or Gevent. The following sections describe deployment details specific to each of these web servers.
Werkzeug (Flask development web server)¶
Werkzeug supports WebSocket routing in version 2, which means that this extension can only be used with versions of Flask starting at 2.0.
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.
Gunicorn¶
To use this package with Gunicorn you need to keep in mind that each active
WebSocket client will use up a worker. For that reason, 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
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.
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.
Unlike other WebSocket packages for Gevent, this extension does not require the
gevent-websocket
package to be installed.