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

StackOverflow https://stackoverflow.com/questions/19995

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Да, то, что вы ищете, это КОМЕТА. http://en.wikipedia.org/wiki/Comet_(программирование).Другими хорошими терминами Google для поиска являются AJAX-push и Reverse-ajax.

Другие советы

Да, это называется Обратный Аякс или Комета.Comet — это, по сути, общий термин для различных способов открытия долгоживущих HTTP-запросов для передачи данных в веб-браузер в режиме реального времени.Я бы порекомендовал Push-сервер StreamHub, у них есть несколько классных демоверсий, и начать с них гораздо проще, чем с любого другого сервера.Проверьте Учебное пособие по началу работы с Comet и StreamHub для быстрого ознакомления.Вы можете использовать Community Edition, которую можно загрузить бесплатно, но она ограничена 20 одновременными пользователями.Коммерческая версия стоит того только ради поддержки, плюс вы получаете клиентские адаптеры SSL и Desktop .NET и Java.Помощь доступна через Группа Google, в сети много обучающих программ и есть Адаптер GWT Comet слишком.

В настоящее время вам следует использовать 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
};

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

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

http://en.wikipedia.org/wiki/Comet_(программирование)

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

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

Для своего рода «панели управления колл-центром» веб-приложения, которая включает обновление статуса агента и очереди вызовов для действующего колл-центра, мы разработали собственное решение, которое работает, но далеко от библиотеки, которую вы могли бы использовать.

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

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

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

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

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

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

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

Еще один стандартный способ: SSE (события, отправленные сервером, также известные как EventSource, после объекта JavaScript).

Комету на самом деле придумал Алекс Рассел из Dojo Toolkit ( http://www.dojotoolkit.org ).Вот ссылка на дополнительную информацию http://cometdproject.dojotoolkit.org/

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

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

Достичь того, к чему вы стремитесь, можно с помощью постоянных http-соединений.

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

Вы не предоставляете много информации, но если вы планируете создать какой-то сайт, управляемый событиями (а-ля шпион Digg) или что-то в этом роде, вы, вероятно, захотите реализовать скрытый IFRAME, который подключается к URL-адрес, по которому соединение никогда не закрывается, а затем вы передаете теги сценария с сервера клиенту для выполнения обновлений.

Возможно, стоит проверить Метеорный сервер это веб-сервер, разработанный для COMET.Хороший демо и он также используется Твиттерфолл.

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

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

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

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

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

Возможно, захочется посмотреть ОбратныйHTTP также.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top