2010-12-16 2 views
1

Я пишу небольшой веб-клиент IM, он работает хорошо, но я сталкиваюсь с некоторыми проблемами.Прототип JavaScript Ajax FIFO Queue

Система написана с использованием PHP и JavaScript, она использует идентификатор идентификации, который он помещает на каждую страницу, когда выполняется запрос ajax, он должен включать этот идентификатор аутентификации. Это не идеальная система, но у меня нет возможности ее изменить.

система IM использует периодические исполнители (библиотеки Prototype), Есть 2 периодические вызовы это делает:

  1. обновления списка контактов, так как это не изменяет очень часто он обновляется каждые 30 секунд или около того
  2. проверить новые сообщения, это происходит через 5 секунд.

Вопрос заключается:

Периодическая исполнитель делает вызов для обновления списка контактов, использует идентификатор аутентификации, сторона PHP поднимает этот запрос, проверяет идентификатор аутентификации, выполняет задачу, возвращает новый список в JSON вместе с новым идентификатором аутентификации, который будет использоваться при последующих запросах.

Если перед первой функцией возвращается проверка новых сообщений (по времени) или отправка сообщения (не синхронизировано), идентификатор проверки подлинности еще не обновлен. Поэтому он использует тот же идентификатор аутентификации, что и предыдущий запрос. Этот идентификатор аутентификации отклоняется стороной PHP системы.

Я ищу способ сериализации запросов в очередь стиля FIFO, что означает, что любой сделанный ajax-запрос (проверка сообщений, проверка контактов, отправка сообщения) может быть перенесен в очередь и будет выполняться, как только предыдущий вызов ajax завершен (100% сделано и возвращено)

ответ

1

Может быть хорошей идеей создать класс очереди запросов и использовать его для обработки ваших запросов ajax. Я уверен, что вы можете найти что-то, сделанное уже прибегая к помощи, но вот один я обнаружил, что должно работать для вас:

http://positionabsolute.net/blog/2007/04/ajax-request-queue.php

Вы должны заменить все ваши Ajax звонков использовать эту новую функцию, но изменяя класс как это должно решить вашу проблему.

Смежные вопросы