The real-time web is a network web using technologies and practices that enable users to receive information as soon as it is published by its authors, rather than requiring that they or their software check a source periodically for updates.
From (you guessed right) Wikipedia
The real-time web is a network web using technologies and practices that enable users to receive information as soon as it is published by its authors, rather than requiring that they or their software check a source periodically for updates.
From (you guessed right) Wikipedia
Examples of real-time web are Facebook's newsfeed, and Twitter, implemented in social networking, search, and news sites. Benefits are said to include increased user engagement ("flow") and decreased server loads.
From (you guessed right) Wikipedia
Examples of real-time web are Facebook's newsfeed, and Twitter, implemented in social networking, search, and news sites. Benefits are said to include increased user engagement ("flow") and decreased server loads.
From (you guessed right) Wikipedia
Developer-friendly asynchrony for Django
Channels is a project to make Django able to handle more than just plain HTTP requests, including WebSockets and HTTP2, as well as the ability to run code after a response has been sent for things like thumbnailing or background calculation.
Ordered, first-in first-out queue with message expiry and at-most-once delivery to only one listener at a time
Think task queues or go channels
Network-transparent
Routing maps channels to consumers
For every message on the channel, Django will call the corresponding consumer function with a message object
Messages also contain a reply channel
Channels only deliver to a single listener, they can’t do broadcast
Groups allow easy control of a set of reply channels
It abstracts member tracking, broadcasting and expiry
Takes client requests and loads the into the channels system
Daphne is an ASGI server that can handle HTTP, HTTP2 and WebSocket protocol
Runs consumer functions
Configurable to be limited to some channels
Communication layer between interface and worker servers
Current implementations include in-memory, redis and IPC
Raise your ✋ if you know what a SHOUTBOX is
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
+ 'channels',
]
+CHANNEL_LAYERS = {
+ 'default': {
+ 'BACKEND': 'asgiref.inmemory.ChannelLayer',
+ 'ROUTING': 'app.routing.channel_routing',
+ },
+}channels_shoutbox/settings.py
+from app.consumers import ShoutboxConsumer
+from channels.routing import route_class
+
+channel_routing = [
+ route_class(ShoutboxConsumer, path=r"^/shoutbox"),
+]
+
app/routing.py
+from channels.generic.websockets import JsonWebsocketConsumer
+
+
+class ShoutboxConsumer(JsonWebsocketConsumer):
+ pass
app/consumers.py
+class Message(models.Model):
+ name = models.CharField(max_length=255)
+ text = models.TextField(blank=True)
+ sent_at = models.DateTimeField(auto_now_add=True)
app/models.py
+from app.models import Message
from django.shortcuts import render
def index(request):
- return render(request, 'index.html')
+ messages = Message.objects.order_by('-sent_at').all()
+ return render(request, 'index.html', {'messages': messages})
app/views.py
+from app.models import Message
from channels.generic.websockets import JsonWebsocketConsumer
+from django.template.defaultfilters import date
class ShoutboxConsumer(JsonWebsocketConsumer):
- pass
+
+ def connection_groups(self):
+ return ['all']
+
+ def receive(self, content):
+ message = Message.objects.create(**content)
+ content.update(sent_at=date(message.sent_at, 'r'))
+ self.group_send('all', content)
app/consumers.py
+var ws = new WebSocket('ws://' + location.host + '/shoutbox')
+var messages = $('.messages')
+var form = $('form')
+
+function sendMessage(e) {
+ e.preventDefault()
+ var name = form.name.value
+ if (!name) {
+ return
+ }
+ var text = form.text.value
+ ws.send(JSON.stringify({
+ name: name,
+ text: text,
+ }))
+ form.text.value = null
+}
+
+function recvMessage(e) {
+ var data = JSON.parse(e.data)
+ // Render message in DOM
+}
+
+form._.events({submit: sendMessage})
+ws.onmessage = recvMessageapp/static/app.js
For announcements join our Facebook group:
https://www.facebook.com/groups/pythonph/
For meetup news join our Meetup page:
https://www.meetup.com/pythonph/