Я взглянул на краткий обзор реализации серверного push-запроса Servlet 3.0 здесь и оставил больше вопросов, чем я пришел.Вопросы касаются моего варианта использования: внедрение динамической системы уведомлений среди «друзей», как в Facebook.Концептуально думая о проблеме, я бы подошел к ней так:
- Поместить бесконечный цикл jQuery на каждую страницу, содержащую код для выдачи XMLHttpRequest-запроса "get" на сервер
- Разрешить серверу сохранять объекты запроса / ответа, относящиеся к этому типу XMLHttpRequests, в карте области приложения (с помощью AsyncContext и .startAsync ()), используя ключ веб-сайта пользователя
- Каждый раз, когда пользовательучаствует в действии, которое порождает уведомление, запрашивает карту области приложения для идентификаторов друзей пользователя и, используя хранящиеся там объекты ответа, отправляет уведомление каждому другу.
- Каждый из друзей получает уведомление,и бесконечный цикл на страницах, где они находятся, снова вызывает XMLHttpRequests (из-за бесконечного цикла)
Предполагается, что моя система концептуально исправна (и если это не так, скажите, пожалуйста, что не так)Есть несколько проблем, которые я вижу с этой системой:
Что счастливсоответствует ли пара запрос / ответ на карте после использования ответа?Я должен вручную удалить его с карты или подождать, пока цикл на стороне клиента отправит другой запрос, чтобы пара сохраненных объектов запрос / ответ могла быть заменена парой, связанной с новым XMLHttpRequest?Приведенная выше ссылка использует слова «зафиксированный» и «незафиксированный» в отношении объектов ответа.Может кто-нибудь объяснить, что означают эти слова в этом контексте (у меня есть ощущение, что они связаны с долговечностью объектов ответа)?
Что произойдет, если двое или более друзей пользователяучаствовать в действиях, которые вызывают уведомления в то же время?Для каждого пользователя хранится только одна пара запрос / ответ.В зависимости от того, какое действие совершает друг, он обнаруживает, что соответствующая пара запросов / ответов пользователя получает уведомление, отправленное этому пользователю, но как быть с действиями других друзей?Если все они происходят одновременно, то другие действия не будут иметь пару запрос / ответ, которую можно использовать для отправки уведомления, пока пользователь не отправит еще один запрос XMLHttpRequest для сохранения на карте.Предположительно другие действия проанализируют карту и либо не найдут запись для этого пользователя (поскольку она была удалена вручную после того, как другое действие использовало ответ), либо найдут «устаревший» объект запроса / ответа, который уже использовался.Я предполагаю, что объект ответа не может быть использован для двух разных ответов, так как бы кто-то пошел на исправление этого?
Что произойдет, если уведомление отправлено пользователю, когдапользователь переключает страницы?Если мы рассматриваем полностью загруженную веб-страницу как открытое окно для получения запросов на уведомление, а загрузочную - как закрытое окно (поскольку она не может получать и обрабатывать ответы на запросы XMLHttpReRek, отправленные на предыдущей странице), уведомления, отправленные во время этогосроки будут потеряны.Могу ли я что-нибудь сделать, кроме запроса базы данных о новых действиях и создания уведомлений таким образом при загрузке страницы?
Наконец, что происходит, когда пользователь уходит с сайта и сеансаистекает?От нас ожидают, что мы будем периодически повторять карту и удалять запросы, связанные с отсутствующими сессиями?
Извините, если это было длительное чтение.Даже если вы сможете ответить только на один из приведенных выше вопросов, это поможет!