Skip to main content

A channel layer based on ZMQ

Project description

channels_zmq

Tests status

A channel layer implementation using ZeroMQ PUB-SUB topology.

Installation

Install package from PyPI:

pip install channels-zmq

Usage

Configure the layer in your Django settings file. You can choose one of the two implementations described below:

Embedded layer
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_zmq.core.EmbeddedZmqChannelLayer",
        "CONFIG": {
            "pub_socket_address": "<SOME SOCKET ADDRESS>",
            "capacity": 100,
            "expiry": 60,
        },
    },
}

The embedded layer binds a ZeroMQ PUB socket inside the process that calls send or group_send. Consumers will connect their SUB sockets to the same socket.

While this is a very lightweight implementation, it only allows a single process to call send and group_send with the same layer.

If you need to send data created through other processes, you should create a different layer or use the dedicated layer.

               +----------------+
               |PRODUCER PROCESS|
               |----------------|
               |   PUB SOCKET   |
               +----------------+
                  ^     ^    ^
                  |     |    |
      +-----------+     |    +----------+
      |                 |               |
+------------+   +------------+   +------------+
| SUB SOCKET |   | SUB SOCKET |   | SUB SOCKET |
|------------|   |------------|   |------------|
| CONSUMER 1 |   | CONSUMER 2 |   | CONSUMER 3 |
+------------+   +------------+   +------------+
Dedicated layer
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_zmq.core.DedicatedZmqChannelLayer",
        "CONFIG": {
            "pull_socket_address": "<DAEMON PULL SOCKET ADDRESS>",
            "pub_socket_address": "<DAEMON PUB SOCKET ADDRESS",
            "capacity": 100,
            "expiry": 60,
        },
    },
}

The dedicated layer connects a ZeroMQ PUSH socket to a the configured PULL socket location when you call send or group_send. Consumers will connect to the configured PUB socket location instead.

While this implementation allows multiple processes to send messages over the same layer, it requires you to implement a daemon process that will read messages on the PULL socket and send them through the PUB socket.

                  +--------------------------+
                  |      DAEMON PROCESS      |
                  |--------------------------|
                  | PUB SOCKET | PULL SOCKET |
                  +--------------------------+
                      ^   ^           ^   ^
                      |   |           |   |
      +---------------+   |           |   +----------------+
      |                   |           |                    |
+------------+   +------------+   +-------------+   +-------------+
| SUB SOCKET |   | SUB SOCKET |   | PUSH SOCKET |   | PUSH SOCKET |
|------------|   |------------|   |-------------|   |-------------|
| CONSUMER 1 |   | CONSUMER 2 |   | PRODUCER 1  |   | PRODUCER 2  |
+------------+   +------------+   +-------------+   +-------------+

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

channels-zmq-0.1.0.tar.gz (24.2 kB view details)

Uploaded Source

Built Distribution

channels_zmq-0.1.0-py3-none-any.whl (17.8 kB view details)

Uploaded Python 3

File details

Details for the file channels-zmq-0.1.0.tar.gz.

File metadata

  • Download URL: channels-zmq-0.1.0.tar.gz
  • Upload date:
  • Size: 24.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.3

File hashes

Hashes for channels-zmq-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a1c770470830dc59c4df369f5915d81079c1c733dd092469ccb7170be631416b
MD5 36881531b745e9dc5c3bcf782380eba7
BLAKE2b-256 8cc81a5cecd6396caa0688a7c1ae0a2bc861cdfb59b33ac4cafa85141946f183

See more details on using hashes here.

File details

Details for the file channels_zmq-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: channels_zmq-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.3

File hashes

Hashes for channels_zmq-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 173e60ee52e1e9cb77a706d82a88563b03f5be7e8f6c4f14e2089f2d97fb330d
MD5 f39b03d3a74cdbac346e8160d8f9ad7d
BLAKE2b-256 a6b4141bc79c464899c0ac95273dbe04e962c60e0b1b3591efd57e6ddc232472

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