Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Live notification/chat in django

I am making a website with django now and I want to implement a live notification feature like the one on facebook or SE.

I did some research and it seems although there's two options: ajax long polling and websockets, the latter is the way to go.

However, as you know the go to plugin for websocket 'socket.io' turns out to be a node.js plugin and the django port only seems to support python 2 and the project seems pretty much dead. I am using python 2.7 as my project interpreter but I want to future proof myself so that if I upgrade to python3 later, I don't find myself not being able to use this functionality.

So my question is this: Is there a straight forward and future ready way to implement websocket which will be used to send live notifications and chats in django env?

like image 390
Dan Avatar asked Nov 14 '14 12:11

Dan


1 Answers

Django itself is build in blocking manner, i.e. with synchronous approach. So, you cannot open persistent websocket with django app, as it will block entire django thread.

If you want to enable notification/chat within django project environment, i would recommend to use centrifuge. It is written in python, but async (non-blocking) framework is used: tornado.

But, you don't need to even know how it works, as it provides simple REST api to communicate with it.

Simplified workflow, check docs for more details:

  1. Start centrifuge at same server, as your django project (or on another but with low latency between them)
  2. Your front-end will open websocket with centrifuge, not with django project.
  3. When you need to send notification, send it to centrifuge from django via REST api, and centrifuge will deliver it to needed clients!

I've already tried it and it works!

like image 77
stalk Avatar answered Sep 28 '22 23:09

stalk