AJAX & PHP (конкурирующие запросы)

Lirik

Новичок
В двух словах ситуация такая, есть банально страница , пользователь естественно может открыть сколько угодно их, суть в том что с каждой из них уходит AJAX запрос, которому в результате сбрасываются специфичные данные накопленные во временном буфере, после этого буфер очищается(чтобы не копить кучу ненужных данных), проблема в том, что если с одной страницы придет запрос раньше чем с другой, то соответственно буфер сбросится и на другой странице пользователь не увидит ничего, кто как решает данную проблему? первой моей мыслью было посылать вместе с запросом какой-либо уникальны хеш, зависящий от окна или как-то так, но вроде костыль, и к тому же придется держать на каждое окно по буферу, что не хочется делать, т.к память уйдет быстро, буфер достаточно большой бывает. Также думал держать эти уникальные хеши в памяти и сбрасывать буфер только когда придут все запросы от всех уникальных хешей(читай окон в браузере), или например если окно закрыли то если больше 10 секунд например нет запроса от него, удалить данный хэш из памяти(получается что-то вроде списка идентификаторов как в Comet при рассылке). как поступить в данном случае?
 

С.

Продвинутый новичок
первой моей мыслью было посылать вместе с запросом какой-либо уникальны хеш, зависящий от окна или как-то так, но вроде костыль, и к тому же придется держать на каждое окно по буферу, что не хочется делать
В таком случае проблема решается отказом от новомодного аякса. По всему выходит он там вам совсем не нужен.
 

Lirik

Новичок
С.
К сожалению нужен. по другому никак, ну если не делать Comet, тогда эта проблема решится просто тупой рассылкой буфера во все каналы.
 

С.

Продвинутый новичок
Аякс "нужен. по другому никак", но обрабатывать асинхронность аякса "не хочется". Вот ведь дилема, блин!
 

Lirik

Новичок
С.
Язвить и я могу. я четко описал, что проблема не в асинхронности, а в том как распределить инфу между запросами.
 

С.

Продвинутый новичок
я четко описал, что проблема не в асинхронности, а в том как распределить инфу между запросами.
А почему логическая связь с информацией в запросах теряется? Потому... что... БИНГО!.. аяксовские запросы шлются асинхронно от основного запроса!
 

С.

Продвинутый новичок
Запрос, который строит страницу, из которой шлются аякс-запросы, которые не может связать Lirik с теми данными, которыми он располагал, когда он отвечал на "основной" запрос.
 

Фанат

oncle terrible
Команда форума
А если информация пришла позже того, как был выполнен этот "основной запрос"?
 

Фанат

oncle terrible
Команда форума
Lirik
классическое решение - очищать буфер только после того, как пользователь явным образом среагировал, дав понять системе, что он прочитал поступившие сообщения.
 

Lirik

Новичок
С.
Никакого основного запроса нету, хватит язвить уже. Связь теряется т.к пользователь может открыть несколько вкладок и из одной из них точно уйдет запрос раньше другого и буфер сбросится после вывода информации. кроме С. у кого-нибудь может будут идеи?просто интересно или не, только язвить и говорить что кто-то не понимает AJAX и бла-бла-бла...
 

Lirik

Новичок
Фанат
Вариант, подумаю. спасибо. Правда есть тонкий момент, эти сообщения не совсем какие-то уведомления пользователю, т.е он может открыть страницу и ничего не щелкать, просто смотреть что и как изменяется. В куки тоже писать не хочется, т.к объем информации большой просто.
 

fixxxer

К.О.
Партнер клуба
Чота сложно я ниче не понял. Но по идее так - храним последние 10 (100, 500) событий, при первом открытии окна отдаем все, дальше аяксом передаем id последнего и подгружаем с этого момента. Не?
 

Lirik

Новичок
fixxxer
Буфер этих событий после того как отдает инфу очищается.тут просто вся загвоздка в нескольких окнах именно. ладно попробую реализовать как предлагали Фанат или fixxxer, если не получится проще будет сделать на Comet наверное по-нормальному
 

vasa_c

Новичок
если окно закрыли то если больше 10 секунд например нет запроса от него, удалить данный хэш из памяти
То есть подразумевается, что запрос идёт с периодичностью не реже, чем раз в 10 секунд? Тогда просто хранить последние за эти 10 секунд :)
 

Lirik

Новичок
vasa_c
Да нет, там немного сложнее =) уже решил так-то) всем спасибо.
 
Сверху