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

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

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

@Rachel - Живые обновления, чтобы вы могли видеть, что делают другие. Подходит для таких сайтов, как StackOverflow, и для веб-приложений для совместной работы, таких как документы Google.

Itai Bar-Haim 15.08.2012 16:31

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

Shadow 07.07.2016 06:25

Я не уверен, что есть. Чтобы сделать его концептуально проще для приложения, я думаю, вы могли бы реализовать транспортный уровень поверх запросов на опрос и, таким образом, исключить ответственность за опрос из логики вашего приложения. Может, кто-то вообще такое уже реализовал? Редактировать: По-видимому, это называется обратный "rel =" nofollow noreferrer "> en.wikipedia.org/wiki/Reverse_Ajax"> обратный Ajax и Комета "rel =" nofollow noreferrer "> en.wikipedia.org/wiki/Comet_ (programming)"> Comet>, но пока похоже, что вы должны реализовать это самостоятельно. Есть библиотека JavaScript для этого?

Anders Sandvig 21.08.2008 18:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
134
3
72 815
18
Перейти к ответу Данный вопрос помечен как решенный

Ответы 18

Ответ принят как подходящий

Да, вы ищете COMET http://en.wikipedia.org/wiki/Comet_(programming). Другие подходящие термины Google для поиска - это AJAX-push и reverse-ajax.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Возможно, стоит проверить Сервер Meteor, веб-сервер, разработанный для COMET. Хороший демонстрация, он также используется щебетать.

Можно также посмотреть на Обратный HTTP.

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

Определенно правильный путь, как только вы начнете его реализовывать самостоятельно, вы поймете, сколько еще нужно сделать - переподключение, длительный опрос, потоковые окна iframe, кроссбраузерная поддержка, HTTPS ...

Corehpf 25.09.2009 20:31

Объяснение того, что такое комета, поможет ответить на этот вопрос.

Kevin Monk 25.09.2009 20:39

@Satir: добавил краткое объяснение. В других ответах есть ссылки на статью в Википедии.

Nosrama 25.09.2009 21:33

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

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

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

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

По сравнению с событиями, отправленными сервером: stackoverflow.com/questions/5195452/…

Ciro Santilli TRUMP BAN IS BAD 06.01.2016 21:21

Я полностью согласен ... Использование HTTP для двунаправленной связи - это все равно что думать в вызовах REST, чтобы заставить Марио прыгать по панцирям черепахи ... это безумие. Вам НЕ НУЖНО делать запросы и ждать ответов, когда люди просто нажимают кнопку ... Вы просто этого не делаете. HTTP - это протокол документов. Протокол передачи гипертекста. Ajax Push - это безумно сложный способ обойти HTTP, чтобы сделать то, что WebSocket делает по задумке. Перестаньте быть глупым и используйте правильный инструмент для работы.

Nick Steele 19.08.2016 19:55

вам действительно нравятся эллипсы, а иногда и новая форма из четырех точек, которую я назову «многоточием»!

imbatman 19.02.2019 17:26

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

Последняя версия спецификации W3C w3.org/TR/2009/WD-eventsource-20091029 перенаправляет на html.spec.whatwg.org/multipage/comms.html#server-sent-events

Ciro Santilli TRUMP BAN IS BAD 06.01.2016 21:20

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