Как насчет использования сервера XMPP для решения проблемы?
Первоначально разработанная для платформы обмена мгновенными сообщениями, XMPP - это протокол обмена сообщениями, который позволяет пользователям системы обмениваться сообщениями. (Это еще не все - но давайте будем простыми.)
Давайте немного упростим сценарий. Представьте себе следующее:
Вы системный администратор. Когда система
есть проблема, вы должны позволить всем
сотрудники, около 20 из них, знают, что
система не работает.
В старые времена каждый сотрудник будет
спросить вас: "Система работает?" каждый
час или около того, и вы ответите
пассивно. Пока это работает, вы
перегружен - не исправляя система
отключение, но 20 человек просят
состояние системы каждый час.
Теперь, AIM изобретен! Так как каждый
сотрудник имеет доступ к AIM, вы
подумал: «Эй, как насчет того, чтобы каждый
один из них присоединяется к системе
Статус 'чат, а я просто вышлю
сообщение в комнату, когда система
вниз (или вернулся)? "
сотрудники, которые заинтересованы в
зная статус системы просто присоединится
комната «Состояние системы», и будет
уведомление об обновлении состояния системы.
Возвращаясь к проблеме, которую мы пытаемся решить ...
- Системный администратор = "Система", которая хочет уведомлять пользователей веб-приложения.
- Сотрудники = пользователи веб-приложений, которые хотят получать уведомления.
- Состояние системы чата = Still, состояние системы чата
Когда пользователь веб-приложения входит в ваше веб-приложение, заставляет страницу автоматически регистрировать его на сервере XMPP и присоединяется к чату состояния системы.
Когда система хочет уведомить пользователя, напишите код для входа на сервер XMPP, войдите в чат и отправьте сообщение в комнату.
Используя XMPP, вам не нужно беспокоиться о:
- Настройка «Постоянного соединения». Некоторые серверы XMPP с открытым исходным кодом, eJabberd / OpenFire, имеют встроенную поддержку BOSH, реализацию XMPP модели Comet.
- Как доставлено сообщение
Однако вам потребуется следующее:
- Найдите библиотеку Javascript, которая может помочь вам войти на сервер XMPP. (Только Google. Их много.)
- Найдите библиотеку XMPP для серверного кода. (Библиотека XMPP существует как для Java, так и для C #. Но я не уверен, какую систему вы используете за кулисами.)
- Вручную подготовьте каждого пользователя на сервере XMPP (похоже, у вас есть только 20 человек. Это должно быть легко - однако, если группа становится больше, вы можете захотеть выполнить автоматическую инициализацию - что достижимо с помощью клиентского Javascript Библиотека XMPP.)
Что касается длительных вызовов AJAX, эта реализация ограничена проблемой не более 2-х соединений с одним доменом. Если вы использовали одно соединение для этого вызова XMPP, у вас есть только еще одно соединение для выполнения других вызовов AJAX в веб-приложении. В зависимости от того, насколько сложным является ваше веб-приложение, это может быть или не быть желательным, поскольку, если 2 AJAX-вызова уже были сделаны, любой последующий AJAX-вызов должен будет ожидать освобождения одного из AJAX-конвейеров, что может привести к «замедлению» в работе. ваше приложение.
Это можно исправить, преобразовав все вызовы AJAX в сообщения XMPP, и пригласив на сервер пользователя-бота для прослушивания этих сообщений и ответа на него, скажем, путем отправки обратно фрагментов HTML / объектов JSON с данными , Однако это может быть слишком много для того, чего вы пытаетесь достичь.
Ааа. Надеюсь, это имеет смысл ... или нет. : Р