CHANNELS
A R U N A R U N I S T O
In Django, "channels" refer to a powerful
extension that allows you to handle real-
time functionality in your web applications.
Traditionally, Django is a synchronous web
framework, meaning it processes requests
one at a time and is not well-suited for
handling real-time features like chat,
notifications, or live updates.
Django Channels introduces an
asynchronous layer to Django, enabling you
to build applications that can handle
asynchronous events and real-time
communication.
Synchronous is single-thread, so only
one operation or program will run at a
time. Asynchronous is non-blocking,
which means it will send multiple
requests to a server.
Synchronous programming is inherently
blocking, which means it will send one
request to a server at a time and wait
for each request to be answered before
moving on to the next one.
Asynchronous programming, on the
other hand, is designed to mitigate this
blocking behavior. It allows a program
to send multiple requests to a server or
perform multiple tasks concurrently
without waiting for each one to
complete before moving on to the next.
Some common use cases,
1. WebSockets: Channels make it possible to
work with WebSocket connections, enabling
real-time bidirectional communication
between the server and clients.
2. Background Tasks: Django Channels
allows you to run background tasks
asynchronously, which is useful for handling
long-running or scheduled processes
without blocking the main application.
Celery, a popular task queue, can also be
integrated with Channels for more advanced
background processing.
Celery is an open-source distributed
task queue system that is widely used
in Python web applications to handle
asynchronous and distributed tasks. It
allows you to offload time-consuming
or resource-intensive tasks to be
executed in the background, separate
from the main application process.
Celery is particularly useful for
scenarios where you want to perform
tasks asynchronously, such as sending
emails, processing large data sets, or
handling periodic tasks.
3. Event Handling: You can create event-
driven applications where events are
broadcasted to multiple clients or users in
real-time. For example, you can notify users
of updates to a shared document or notify
them when new data is available.
4. Consumer Classes: In Channels, you
define consumers, which are Python classes
responsible for handling WebSocket
connections and other asynchronous
events. Consumers can subscribe to specific
channels and respond to events on those
channels.
Installing the channels,
python -m pip install -U 'channels[daphne]'
Once the installation done, you should add
‘daphne’ to the above of installed apps in
your [Link] file
INSTALLED_APPS = [
"daphne",
"[Link]",
"[Link]",
"[Link]",
"[Link]",
...
]
After this adjust your [Link] file in your
project directory with below code
import os
from [Link] import ProtocolTypeRouter
from [Link] import get_asgi_application
[Link]('DJANGO_SETTINGS_MODU
LE', '[Link]')
‘’’ Initialize Django ASGI application early to ensure
the AppRegistry is populated before importing
code that may import ORM models. ‘’’
django_asgi_app = get_asgi_application()
application = ProtocolTypeRouter({
"http": django_asgi_app,
})
And finally, set your ASGI_APPLICATION
setting to point to that routing object as
your root application. add this in your
[Link] file
ASGI_APPLICATION = "<project_name>.[Link]"
Real-time examples:
1. Chat Applications
2. Live Notifications
3. Collaborative Editing
4. Online Gaming
5. Live Updates
6. IoT Control
7. Live Polls and Surveys
8. Collaborative Project Management
9. Location Tracking
10. Customer Support Chat
11. Live Streaming