07.12.2011, 09:59
|
Кандидат Javascript-наук
|
|
Регистрация: 18.06.2010
Сообщений: 122
|
|
Вопрос по long-polling
Прочитал недавно статью про долгие опросы, казалось, вроде всё понятно, да вот реализовать нормально не могу...
Сказано: Соединение не закрывается сервером пока не появится событие
Так как отследить этот момент, когда возникает событие? К примеру, у меня есть данные в БД, и мне нужно отправлять ответ только если они обновились, так значит надо во время интервала между запросами клиента, постоянно отправлять SQL-запрос выборки в базу, и проверять там изменение?
|
|
07.12.2011, 10:13
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,127
|
|
Maxman, ответ на твой вопрос сильно зависит от используемой СУБД и серверного языка...
Но как вариант, узнать о изменениях без "длительного ожидания ответа" можно например так:
- на сервер отсылается запрос "Есть ли какие-то изменения" а в ответ получаешь некий идентификатор твоего запроса
- далее шлются запросы типа "как там мой запрос с таким-то идентификатором"
- если запрос готов - можно запрашивать его результаты
|
|
07.12.2011, 14:39
|
Кандидат Javascript-наук
|
|
Регистрация: 18.06.2010
Сообщений: 122
|
|
ksa, СУБД - MySQL, язык - PHP. Но, по моему вы какой-то усложнённый вариант предлагаете... Какой смысл, если это короткий опрос получается, так можно и сразу результат спрашивать. Цель в том, чтобы уменьшить число запросов от клиента к серверу. Но как на PHP ловить изменения в базе за какой-то промежуток времени, кроме как вызывать sleep() в цикле или рекурсии, и постоянно проверять базу? Или это так и делается?
|
|
07.12.2011, 14:52
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,127
|
|
Сообщение от Maxman
|
Какой смысл, если это короткий опрос получается, так можно и сразу результат спрашивать.
|
Смысл если запрос как раз долгий
Сообщение от Maxman
|
СУБД - MySQL, язык - PHP.
|
Ни с тем, ни с тем я не работал...
Инициатором проверки может быть как клиент... Так и серверный процесс (я использую термины СУБД Cache)...
Вопрос в том - какую задачу ты пытаешся решить?
Последний раз редактировалось ksa, 07.12.2011 в 14:54.
|
|
07.12.2011, 15:35
|
Кандидат Javascript-наук
|
|
Регистрация: 18.06.2010
Сообщений: 122
|
|
Сообщение от ksa
|
Вопрос в том - какую задачу ты пытаешся решить?
|
Пытаюсь переделать свой чат, чтобы сообщения приходили мгновенно без обновления страницы.
|
|
07.12.2011, 15:48
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,127
|
|
Для чата таки инициатором "обновления" должен быть клиент...
Сервер может делать некую "пред подготовку". Например в специальной табличке держать ссылки на сообщения за некий промежуток времени...
Т.е. клиент будет обращаться не ко всей табличке сообщений с поиском нового... А к той маленькой. Там записей меньше - ответ-список получишь быстрее...
Последний раз редактировалось ksa, 07.12.2011 в 21:06.
|
|
09.12.2011, 03:49
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Сообщение от Maxman
|
Пытаюсь переделать свой чат, чтобы сообщения приходили мгновенно без обновления страницы.
|
Последняя из технологий на смену long-polling - это веб-сокеты. Особенно активно продвигается Гуглом. Многие пророчили ей большое будущее, потому что обмен информацией идет по инициативе сервера, а не клиента (!). Но... обнаружились проблемы в безопасности этого механизма... Хотя очень заманчиво. Рискнёте?
http://ru.wikipedia.org/wiki/WebSocket
|
|
09.12.2011, 17:17
|
Кандидат Javascript-наук
|
|
Регистрация: 18.06.2010
Сообщений: 122
|
|
Сообщение от Маэстро
|
Рискнёте?
|
Если честно, пока как-то нет желания их использовать, тем более если в ИЕ не поддерживаются...
Кстати, изначально я хотел сделать сокетами через флэш-объект, но всё-же решил остановиться на поллинге)
Последний раз редактировалось Maxman, 09.12.2011 в 17:25.
|
|
09.12.2011, 18:01
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Сообщение от Maxman
|
изначально я хотел сделать сокетами через флэш-объект)
|
А какое у Вас ориентировочное количество одновременных коннектов к серверу? Связь через флэш довольно сильно зависит от того, какая серверная часть. Я пришел к выводу, что система получается монстровая, при этом при инициализации нового подключения жрётся много ресурсов и тратится до нескольких секунд времени (опыт эксплуатации на java).
|
|
09.12.2011, 21:38
|
Кандидат Javascript-наук
|
|
Регистрация: 18.06.2010
Сообщений: 122
|
|
Сообщение от Маэстро
|
А какое у Вас ориентировочное количество одновременных коннектов к серверу?
|
Ну на самом деле небольшое, но хотелось бы всё равно сделать нормально, т.е. подразумевая что там много будет много народу сидеть онлайн
|
|
|
|