Есть ли способ передать данные PUSH с веб-сервера в браузер?

Конечно, я знаю Ajax, но проблема с Ajax заключается в том, что браузер должен часто опросить сервер, чтобы узнать, есть ли новые данные. Это увеличивает нагрузку на сервер.

Есть ли лучший способ (даже с использованием Ajax), отличный от опроса сервера?

Ответ 2

Да, он называется Обратный Ajax или Комета. Комета в основном является зонтичным термином для разных способов открытия долговечных HTTP-запросов, чтобы передавать данные в реальном времени в веб-браузер. Я бы рекомендовал StreamHub Push Server, у них есть классные демонстрации, и с ним гораздо легче начать работу, чем с любыми другими серверами. Ознакомиться с Начало работы с Comet и StreamHub Tutorial для быстрого ввода. Вы можете использовать Community Edition, который можно скачать бесплатно, но ограничен 20 одновременными пользователями. Коммерческая версия хорошо стоит для поддержки, плюс вы получаете клиентские адаптеры SSL и Desktop.NET и Java. Справка доступна через Google Group, там есть хорошая куча учебников в сети и там адаптер GWT Comet.

Ответ 3

В настоящее время вы должны использовать WebSockets. Это стандарт 2011 года, который позволяет инициировать соединения с HTTP, а затем обновлять их до двунаправленного обмена сообщениями на основе клиент-сервер.

Вы можете легко начать соединение с javascript:

var ws = new WebSocket("ws://your.domain.com/somePathIfYouNeed?args=any");
ws.onmessage = function (evt) 
{
  var message = evt.data;
  //decode message (with JSON or something) and do the needed
};

Обработка на стороне сервера зависит от вашего десятичного стека.

Ответ 4

Посмотрите на комету (пародия на то, что Ajax - это моющее средство, а также Comet), который в основном "обратный Ajax". Имейте в виду, что для этого требуется долговременное подключение к серверу для каждого пользователя для получения уведомлений, поэтому имейте в виду последствия для производительности при написании вашего приложения.

http://en.wikipedia.org/wiki/Comet_(programming)

Ответ 5

Комета определенно то, что вы хотите. В зависимости от ваших требований к языку/структуре существуют разные серверные библиотеки. Например, WebSync - это интегрированный комьютетный сервер IIS для разработчиков ASP.NET/C#/IIS, и есть множество других автономных серверов, таких как хорошо, если вам нужна более тесная интеграция с другими языками.

Ответ 6

Я бы настоятельно рекомендовал потратить некоторое время на комету, но я не знаю реальной реализации или библиотеки, которую вы могли бы использовать.

Для своего рода "панели управления callcenter" веб-приложения, которое включало обновление агента и статус очереди вызовов для Live Callcenter, мы разработали внутреннее решение, которое работает, но находится далеко от библиотеки, которую вы можете использовать.

Что мы сделали, так это реализовать небольшую услугу на сервере, которая разговаривает с телефонной системой, ждет новых событий и поддерживает фотографию ситуации. Эта служба предоставляет небольшой веб-сервер.

Наши веб-клиенты подключаются через HTTP к этому веб-серверу и запрашивают последнюю фотографию (закодированную в XML), отображают ее, а затем снова идут, запрашивая новую фотографию. На этом веб-сервере можно:

  • Вернуть новую фотографию, если есть
  • Заблокируйте клиента в течение нескольких секунд (30 в нашей настройке), ожидая, когда какое-нибудь событие закроется и изменит фотографию. Если в этот момент не было создано какое-либо событие, он возвращает ту же фотографию, только для того, чтобы соединение оставалось в живых, а не время ожидания клиента.

Таким образом, когда клиенты опроса, он получает ответ от 0 до 30 секунд макс. Если новое событие уже сгенерировано, оно получает его немедленно), в противном случае он блокируется до создания нового события.

Это в основном опрос, но это несколько умный опрос, чтобы не перегревать веб-сервер. Если комета не является вашим ответом, я уверен, что это может быть реализовано с использованием той же идеи, но с использованием более широко AJAX или кодирования в JSON для достижения лучших результатов. Это было разработано до эпохи AJAX, поэтому есть много возможностей для улучшения.

Если кто-то может обеспечить реальную облегченную реализацию этого, отлично!

Ответ 7

Интересной альтернативой кометам является использование сокетов во Flash.

Ответ 10

Существуют и другие методы. Не уверен, что они "лучше" в вашей ситуации. У вас может быть Java-апплет, который подключается к серверу при загрузке страницы и ожидает отправки материала сервером. Это было бы немного медленнее при запуске, но позволило бы браузеру получать данные с сервера нечасто, без опроса.

Ответ 11

Возможно достичь того, к чему вы стремитесь, используя постоянные http-соединения.

Просмотрите статью кометы в википедии, что хорошее место для начала.

Вы не предоставляете много информации, но если вы планируете создать какой-то сайт, управляемый событиями (a'la digg spy) или что-то в этом роде, вы, вероятно, будете искать реализацию скрытого IFRAME который соединяется с URL-адресом, где соединение никогда не закрывается, а затем вы будете нажимать script -tags с сервера на клиент для выполнения обновлений.

Ответ 12

Вы можете использовать приложение Flash/Flex на клиенте с BlazeDS или LiveCycle на стороне сервера. Данные могут быть переданы клиенту с использованием RTMP-соединения. Имейте в виду, что RTMP использует нестандартный порт. Но вы можете легко вернуться к опросу, если порт заблокирован.

Ответ 13

Возможно стоит проверить Meteor Server, который является веб-сервером, предназначенным для COMET. Nice demo, а также используется twitterfall.

Ответ 14

Как только соединение открывается на сервере, его можно сохранить открытым, а сервер может нажимать контент на некоторое время назад, когда я использовал multipart/x-mixed-replace, но это не сработало в IE.

Я думаю, что вы можете делать умные вещи с опросом, что заставляет его работать больше, чем push, не отправляя контент без изменений, но оставляя соединение открытым, но я этого никогда не делал.

Ответ 15

Вы можете попробовать наш Кометный компонент - хотя это чрезвычайно экспериментально...!

Ответ 16

пожалуйста, проверьте эту библиотеку https://github.com/SignalR/SignalR, чтобы узнать, как динамически перемещать данные клиентам по мере их доступности.

Ответ 17

Вы также можете посмотреть Java-кнопки, если вы используете страницы jsp.

Ответ 18

Возможно, вы захотите посмотреть ReverseHTTP.