Skip to main content

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 gthread worker

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 eventlet worker
  • Gunicorn with the gevent worker

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask-sock-0.3.0.tar.gz (4.2 kB view details)

Uploaded Source

Built Distribution

flask_sock-0.3.0-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

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

Hashes for flask-sock-0.3.0.tar.gz
Algorithm Hash digest
SHA256 fa468d392c8de84c8d9423da4d8ae8bb7c8fc7b2d7ebd6b3e48536998743ef43
MD5 a75b7cbc4c3e83c15f0b5da6d129222b
BLAKE2b-256 858b2dd9929fedaebc1761a95391651cb9429653a6275c9db902fcc807c65adb

See more details on using hashes here.

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

Hashes for flask_sock-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9355d8b144fed1309cea6653d678aa777bbfc2e44ae7a5a767fe15281f115b35
MD5 ec6e0bb584ca6b794149ea787405cad0
BLAKE2b-256 3cd008dcf953238babf96de3e0a1a624ba9bbd88761cd6449bdb42bd97cb734c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page