Skip to content

Latest commit

 

History

History
80 lines (53 loc) · 2.38 KB

README.rst

File metadata and controls

80 lines (53 loc) · 2.38 KB

Channels Multiplexer

Django Channels does not yet include a Multiplexing Consumer. This project aims to add such a multiplexer.

Version Compatibility

Channels Version Channels Multiplexer Version
v2 0.0.2
v3 >=0.0.3
https://travis-ci.org/hishnash/channelsmultiplexer.svg?branch=master

Install

pip install channelsmultiplexer

Usage

to create a De-Multiplexer

class EchoDemultiplexerAsyncJson(AsyncJsonWebsocketDemultiplexer):
    applications = {
        "echostream": EchoTestConsumer.as_asgi(),
        "altechostream": AltEchoTestConsumer.as_asgi(),
        "closeafterfirst": EchoCloseAfterFirstTestConsumer.as_asgi(),
        "neveraccept": NeverAcceptTestConsumer.as_asgi()
    }

When using this within our application you should reference it like this EchoDemultiplexerAsyncJson.as_asgi().

or you can use the AsyncJsonWebsocketDemultiplexer type directly and pass the multiplexed upstream consumers as kwargs.

application = ProtocolTypeRouter({
                      "websocket": URLRouter([
                                      url(r"^ws/$", AsyncJsonWebsocketDemultiplexer.as_asgi(
                                              echostream = EchoTestConsumer.as_asgi(),
                                              altechostream = AltEchoTestConsumer.as_asgi(),
                                              closeafterfirst = EchoCloseAfterFirstTestConsumer.as_asgi(),
                                              neveraccept = NeverAcceptTestConsumer.as_asgi()
                                      )),
                      ]),
                      "telegram": ChattyBotConsumer.as_asgi(),
      })

This acts just as any other channels consumer, however it will route incoming (JSON) messages to the upstream Consumers.

It does this by reading the value of the stream attribute in the message body. It will then pass the value of the payload attribute upstream.

{
    "stream": "echostream",
    "payload": {"hello": "world"}
}

Messages being sent downstream from the Multiplexed consumers will be embedded within a similar style msg.