axe
Дек. 18, 2009 16:43:57
Есть браузерное приложение. Есть постоянно запущенное серверное приложение. Общаются через mod_python (просьба не ругаться).
Серверное приложение достаточно умное и может запоминать произвольную информацию о своих клиентах.
Мне нужно сделать нотификацию подключенных web-приложений. Как это можно сделать?
Интересны любые способы. Доступ к серверу полный.
На сколько я в курсе, браузер (по http 1.1) имеет постоянное соединение с сервером. Каким-то образом можно найти тот самый сокет, который связан с браузером и отправить в него новый пакет? Если да, то как браузер этот пакет будет обрабатывать?
poltergeist
Дек. 19, 2009 00:20:49
Не сервер обращается к клиенту, а клиент обращается к серверу. HTTP протокол строится на простой модели запрос-ответ и всё тут. То, чего вы хотите, не входит в протокол и клиент после получения ответа от сервера больше ничего не ждёт. Да, есть такое в HTTP протоколе как Keep-Alive, но оно не для этого придумано. Обычно клиентское приложение опрашивает сервер с некоторой периодичностью (Ajax), таким образом сервер может оповестить клиента о наступлении какого-либо события.
regall
Дек. 19, 2009 00:36:18
poltergeist
HTTP протокол строится на простой модели запрос-ответ и всё тут
Да. Но есть работы, которые ведутся в нужном вам направлении. Вот вам точка отправки:
http://googleresearch.blogspot.com/2009/11/2x-faster-web.html
poltergeist
Дек. 19, 2009 00:48:15
regall Ага, стоит только подождать несколько лет, пока эти технологии приживутся или не приживутся:)
Андрей Светлов
Дек. 19, 2009 01:00:21
Сервер за NAT не зайдет, так что открывать им соединение - бессмысленно.
Держать открытое клиентом соединение вечно - тоже большого выигрыша не дает. Сокеты заканчиваются.
Остается только классический AJAX
regall
Дек. 19, 2009 11:05:26
poltergeist
regall Ага, стоит только подождать несколько лет, пока эти технологии приживутся или не приживутся
Зачем ждать, там Гугулы уже выложили пример сервера и клиента на C. Вполне можно копать и пробовать.
http://github.com/mnot/nbhttp/tree/spdy - сервер на Python
http://src.chromium.org/viewvc/chrome/trunk/src/net/flip/ - клиент на С
shiza
Дек. 22, 2009 12:38:08
axe
Дек. 25, 2009 13:11:42
cybergrind
Янв. 15, 2010 22:31:04
проблем нету, т.к. у тебя на каждый процесс живет свой хэндлер, у него и открыт сокет к клиенту.
по этому это делают с использованием чегото вроде twisted/tornado/nevow - того что позволет крутить обработку не запуская кучи инстансов. так что судя по всему мод_питон не очень хорошо укладывается, может и можно под ним, но никто так не делает