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





Да, вы ищете COMET http://en.wikipedia.org/wiki/Comet_(programming). Другие подходящие термины Google для поиска - это AJAX-push и reverse-ajax.
Взгляните на Comet (обман того факта, что Ajax является чистящим средством, как и Comet), который по сути является «обратным Ajax». Имейте в виду, что для этого требуется долговременное соединение с сервером для каждого пользователя, чтобы получать уведомления, поэтому при написании приложения учитывайте влияние на производительность.
После открытия соединения с сервером его можно оставить открытым, и сервер может отправлять контент давным-давно. Я использовал multipart/x-mixed-replace, но в IE это не сработало.
Я думаю, вы можете делать умные вещи с опросом, который заставляет его работать больше как push, не отправляя контент без изменений заголовков, но оставляя соединение открытым, но я никогда этого не делал.
Есть и другие способы. Не уверен, что они «лучше» в вашей ситуации. У вас может быть Java-апплет, который подключается к серверу при загрузке страницы и ожидает отправки данных сервером. Это будет немного медленнее при запуске, но позволит браузеру нечасто получать данные с сервера без опроса.
Вы также можете посмотреть Ява пушлеты, если используете jsp-страницы.
Можно достичь того, к чему вы стремитесь, используя постоянные HTTP-соединения.
Посмотрите Статья о комете в википедии, это хорошее место для начала.
Вы не предоставляете много информации, но если вы хотите создать какой-то сайт, управляемый событиями (a'la digg spy) или что-то в этом роде, вы, вероятно, захотите реализовать скрытый IFRAME, который подключается к URL-адрес, по которому соединение никогда не закрывается, и затем вы отправите теги сценариев с сервера на клиент, чтобы выполнить обновления.
Я настоятельно рекомендую потратить некоторое время на Comet, но я не знаю фактической реализации или библиотеки, которую вы могли бы использовать.
Для своего рода «панели управления центром обработки вызовов» веб-приложения, которое включает обновление агента и состояния очереди вызовов для действующего центра обработки вызовов, мы разработали собственное решение, которое работает, но находится далеко от библиотеки, которую вы могли бы использовать.
Мы реализовали на сервере небольшую службу, которая общается с телефонной системой, ожидает новых событий и сохраняет фотографию ситуации. Эта служба предоставляет небольшой веб-сервер.
Наши веб-клиенты подключаются через HTTP к этому веб-серверу и запрашивают последнюю фотографию (закодированную в XML), отображают ее, а затем снова отправляются, запрашивая новую фотографию. Веб-сервер на этом этапе может:
Таким образом, когда клиенты опрашивают, они получают ответ в течение максимум от 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 ...
Объяснение того, что такое комета, поможет ответить на этот вопрос.
@Satir: добавил краткое объяснение. В других ответах есть ссылки на статью в Википедии.
Комета определенно то, что вам нужно. В зависимости от требований вашего языка / платформы доступны разные серверные библиотеки. Например, 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/…
Я полностью согласен ... Использование HTTP для двунаправленной связи - это все равно что думать в вызовах REST, чтобы заставить Марио прыгать по панцирям черепахи ... это безумие. Вам НЕ НУЖНО делать запросы и ждать ответов, когда люди просто нажимают кнопку ... Вы просто этого не делаете. HTTP - это протокол документов. Протокол передачи гипертекста. Ajax Push - это безумно сложный способ обойти HTTP, чтобы сделать то, что WebSocket делает по задумке. Перестаньте быть глупым и используйте правильный инструмент для работы.
вам действительно нравятся эллипсы, а иногда и новая форма из четырех точек, которую я назову «многоточием»!
Еще один стандартный способ - SSE (События, отправленные сервером, также известные как EventSource после объекта JavaScript).
Последняя версия спецификации W3C w3.org/TR/2009/WD-eventsource-20091029 перенаправляет на html.spec.whatwg.org/multipage/comms.html#server-sent-events
@Rachel - Живые обновления, чтобы вы могли видеть, что делают другие. Подходит для таких сайтов, как StackOverflow, и для веб-приложений для совместной работы, таких как документы Google.