(One of my summaries of a talk at the 2018 european djangocon.)
The web isn’t a pure request/response web anymore. There’s real-time web now. There are lots of tools (yeah!), but you also get lots of complexity (booo!).
Django channels is a framework to use django in the non-http world. Websockets, but not only those. Channels (version 1) is out now for three years, version 2 came out a few months ago. The talk assumes version 2.
Some concepts:
Asynchronous. For us, this means event-driven. A problem is that asynchronous code is normally harder to understand because of its non-linear nature.
But… channels hides most of the complexity for you.
ASGI. A protocol spec (like WSGI), independent of channels.
It is ASGI all the way down. You can nest them.
Protocol server. This implements the ASGI spec for a specific protocol. It interacts with the connection. It bridges the network and the application.
For channels, this often is ‘daphne’.
Routing. Maps incoming messages to consumers. It is nestable and composable.
Scope. A “scope” is created for every connection. It holds the data of the connection.
Channel. IPC mechanism (“Inter Process Communication”). FIFO “at-most-once” queue.
Consumers. The core abstraction to build an ASGI app. It handles events on a connection. It is stateful: every individual connection is connected to an individual consumer.
Note on stateful: everything runs in a single process.
Events. Triggered during a “scope”. In the end, consumers consume events.
Frontend. Often: websockets, which means javascript.
He showed a demo and then some code. (I couldn’t type over the example code, of course :-) ).
First you’ll define “channel layers” in your settings. A queue somewhere, for instance.
Next some routing. Paths are mapped to consumers.
Next some consumers. For instance a websocket consumer. You can have methods
like connect()
, disconnect()
and receive(... event ...)
.
A bit of javascript for the websocket frontend.
Summary of channels:
Async is made easier.
You still have access to the django API.
Photo explanation: interiors means something like this. The office of the manager.
My name is Reinout van Rees and I program in Python, I live in the Netherlands, I cycle recumbent bikes and I have a model railway.
Most of my website content is in my weblog. You can keep up to date by subscribing to the automatic feeds (for instance with Google reader):