Ответ 1
HTTP по сути является протоколом "выталкивания", т.е. клиент извлекает данные с сервера, ждет некоторое время, а затем извлекает больше данных позже. На самом деле нет строго HTTP-способа "нажимать" данные клиенту с сервера.
У вас есть в основном три варианта, когда вам нужно "нажимать" на клиента.
(1) Делать опрос - использовать Ajax/javascript для опроса сервера каждые X раз. Чем меньше X, тем больше он "чувствует" "толчок", но и больше накладных расходов, которые ваш сервер испытывает, чтобы постоянно реагировать на эти запросы.
(2) Используйте websockets. Часть спецификации HTML5 - это нечто, называемое websockets. Websockets позволяет браузеру открывать постоянное соединение с сервером. Как только это соединение было открыто, данные могут быть отброшены назад и назад от клиента к серверу и серверу клиенту, как и к более традиционным сокетам TCP. Проблема с websockets (последнее, что я слышал) заключалась в том, что они все еще могут быть немного темпераментны между браузерами и, конечно, вообще не работают в старых браузерах.
(3) Используйте Flash с интерфейсом Javascript. Flash имеет возможность настраивать постоянные TCP-соединения, которые могут использоваться для push/pull данных, как при обычном TCP-соединении. (См. Также этот вопрос: HTTP-push-примеры в Flex)
Если вы начинаете этот проект с нуля, я бы порекомендовал вам написать свой сервер в Node.js с Socket.io. Socket.io - это "сокет-подобная" инфраструктура, которую вы можете запрограммировать, а затем клиент Javascript (который работает в вашем веб-браузере) разумно определяет лучшее "постоянное соединение" для использования - сначала он пытается использовать Websockets, затем Flash, затем длительный опрос различных типов.
Но так как вы сказали, что хотите использовать Python/Django, тогда вы должны проверить Django-Websockets - рамки для использования websockets с Django. Но не забудьте прочитать Отказ от ответственности, который автор помещает на страницу, есть некоторые значительные трудности/ограничения, связанные с его использованием, в первую очередь потому, что Django не был разработан с учетом веб-сайтов.
Я думаю, что ваш лучший выбор закончится тем, что использует Websockets с интеллектуальным резервным копированием Ajax-опроса, когда браузер пользователя не поддерживает его.