Пример реализации связки nodejs как сокет-сервера с django используя redis
Перед началом установите все зависимости. Должен быть установлен в системе virtualenv и nodejs. Также обязательно наличие запущенного redis сервера.
$ ./build_env.sh
$ cd nodejs
$ npm install
Идея в том, что бы создать приложение которое будет работать в реалтайме по вебсокетам, но обязательно участие в этом всем django. Мы сделаем банальный чат, но по факту это можно использовать для, например нотификаций, когда пользователю приходит уведомление о каком-то событии которое сейчас сделал какой-то другой пользователь. Тоесть, когда django хочет сказать каким-то пользователям о том, что она сделала для другого пользователя :)
У каждой сессии есть идентификатор, который обрабатывает django. Сокеты же обрабатываются через nodejs, а значит без привязки к сессии. Наша задача деанонимизировать сокеты для nodejs используя django сессии. При открытии сокета нам уже будет известна джанговская sessionid, остается только задать django вопросы про эту сессию и принять решение.
Когда клиент дергает что-то в сокет-сервере, nodejs должна будет выполнить обычный http запрос в django, передав ей все клиентские cookies. Таким образом, ответ который получит nodejs от django будет для конкретного пользователя в django-сессии :) а nodejs в данном случае выступит лишь в качестве проксирующего сервиса.
В случае, когда django захочет сказать клиенту через сокет что-то важное, мы будем использовать возможности redis - publish/subscribe. nodejs подпишется на канал, а django будет в него писать. Когда django что-то запишет в определенный канал в nodejs дернется коллбэк, в котором мы сможем обработать полученные данные и отправить их по назначению.
Каждый инструмент под задачу. Django хороша для статики, nodejs отлична для реалтайма. Когда у нас есть проект написанный на django и нужно к нему добавить реалтайм, такой подход один из самых вменяемых с точки зрения простоты реализации, надежности и скорости внедрения/разработки.
Такой подход используется в продакшене весьма успешно, вот я и решил поделиться со всеми кому интересно готовым демонстрационным решением.
Я описал в бложике самый важный код тут, кому интересно вот: http://mrchex.blogspot.com/2013/08/django.html