Hacking Django Channels for Fun (and Profit)
2021-06-03, 10:45–11:30, Main Room

Django is growing some great async features and Channels has been great for handling websockets connecting from your visitor's browser. But what happens when you need to do more? What if you want to keep long-running connections from Django to other websockets, such as Discord servers? How do you do this and still leverage all the batteries included with Django? We will show an approach that makes this all possible and easy as a developer.


  • Intro and Backstory on Django Channels history — 3%
    • Synchronous vs Async Request Loops
    • WSGI vs ASGI for your Django Application
  • Intro to WebSockets — 3%
    • Demo of them used in the real world web applications
    • How they interact with async event loops
  • Django Channels Core Concepts — 10%
    • Consumers
    • Channel Layers
    • Background Workers
  • Consumers and ASGI Routing Example — 10%
  • Where to Background Workers Fit? — 10%
    • Lightweight Tasks
    • Considerations when reliability is not needed
  • How about reversing the Consumer use case? — 20%
    • Create long-running Background Workers
    • Connect to remote services such as Discord to create Bots
  • Example application integration with Discord — 20%
    • Connect to Discord on start and listen for messages and other events
    • Send our own application messages into Discord
  • Building your own long-running Channel Worker — 20%
    • What to add to your project
    • Define channel background tasks to run at start
  • Next steps for this project — 2%
    • Upstream or create Channels addon to make this functionality more generic
    • Add ability to define one-shot tasks
    • Add ability to define post-job tasks to run on stop
  • Conclusion — 2%