Конечно, я знаю об Ajax, но проблема с Ajax заключается в том, что браузер должен часто опрашивать сервер, чтобы определить, есть ли новые данные. Это увеличивает нагрузку на сервер.
Есть ли лучший способ (даже с использованием Ajax), кроме частого опроса сервера?
Ответы:
Да, вы ищете COMET http://en.wikipedia.org/wiki/Comet_(programming) . Другими хорошими терминами Google для поиска являются AJAX-push и reverse-ajax.
источник
Да, это называется Reverse Ajax или Comet . Comet - это общий термин для обозначения различных способов открытия долгоживущих HTTP-запросов для передачи данных в режиме реального времени в веб-браузер. Я бы порекомендовал StreamHub Push Server , у них есть несколько классных демонстраций, и с ним гораздо проще начать работу, чем с любым другим сервером. Ознакомьтесь с кратким руководством по началу работы с Comet и StreamHub . Вы можете использовать Community Edition, которую можно скачать бесплатно, но не более 20 одновременно работающих пользователей. Коммерческая версия того стоит, только для поддержки, а также вы получаете клиентские адаптеры SSL и Desktop .NET & Java. Помощь доступна через группу GoogleВ сети есть много полезных руководств, а также есть адаптер GWT Comet .
источник
В настоящее время вы должны использовать WebSockets. Это стандарт 2011 года, который позволяет инициировать соединения с HTTP и затем обновлять их до двунаправленной связи на основе сообщений клиент-сервер.
Вы можете легко инициировать соединение из JavaScript:
Работа на стороне сервера зависит от вашего стека технологий.
источник
Посмотрите на Comet (подделка того факта, что Ajax является чистящим средством, как и Comet), который в основном является «обратным Ajax». Имейте в виду, что для получения уведомлений каждому пользователю требуется долгоживущее соединение с сервером, поэтому помните о влиянии на производительность при написании приложения.
http://en.wikipedia.org/wiki/Comet_(programming)
источник
Комета, безусловно, то, что вы хотите. В зависимости от ваших требований к языку / структуре, доступны различные серверные библиотеки. Например, WebSync - это интегрированный IIS комет-сервер для разработчиков ASP.NET/C#/IIS , и есть множество других автономных серверов, если вам нужна более тесная интеграция с другими языками.
источник
Я настоятельно рекомендую потратить некоторое время на Comet, но я не знаю фактической реализации или библиотеки, которую вы могли бы использовать.
Для своего рода «контрольной панели callcenter» веб-приложения, которое включало обновление агента и статус очереди вызовов для живого Callcenter, мы разработали собственное решение, которое работает, но далеко от библиотеки, которую вы могли бы использовать.
Мы сделали на сервере небольшой сервис, который общается с телефонной системой, ждет новых событий и сохраняет фотографию ситуации. Этот сервис предоставляет небольшой веб-сервер.
Наши веб-клиенты подключаются через HTTP к этому веб-серверу и запрашивают последнюю фотографию (закодированную в XML), отображают ее и затем снова отправляют, запрашивая новую фотографию. В данный момент веб-сервер может:
Таким образом, когда клиенты опрашивают, он получает ответ в течение от 0 до 30 секунд максимум. Если новое событие уже было сгенерировано, оно получает его немедленно), в противном случае оно блокируется, пока не будет сгенерировано новое событие.
Это в основном опрос, но это несколько умный опрос, чтобы не перегревать веб-сервер. Если Comet не ваш ответ, я уверен, что это можно реализовать с использованием той же идеи, но с использованием более широкого AJAX или кодирования в JSON для достижения лучших результатов. Это было разработано до AJAX-эры, поэтому есть много возможностей для улучшения.
Если кто-то может предоставить действительно легкую реализацию этого, здорово!
источник
Интересной альтернативой Comet является использование сокетов во Flash.
источник
Еще одним стандартным способом является SSE (Server-Sent Events, также известный как EventSource , после объекта JavaScript).
источник
Комета была фактически придумана Алексом Расселом из Dojo Toolkit ( http://www.dojotoolkit.org ). Вот ссылка на дополнительную информацию http://cometdproject.dojotoolkit.org/
источник
Есть и другие методы. Не уверен, что они "лучше" в вашей ситуации. У вас может быть Java-апплет, который подключается к серверу при загрузке страницы и ждет, когда сервер отправит материал. Это будет немного медленнее при запуске, но позволит браузеру получать данные с сервера нечасто, без опроса.
источник
Вы можете использовать приложение Flash / Flex на клиенте с BlazeDS или LiveCycle на стороне сервера. Данные могут быть переданы клиенту с использованием соединения RTMP. Имейте в виду, что RTMP использует нестандартный порт. Но вы можете легко вернуться к опросу, если порт заблокирован.
источник
Можно добиться того, к чему вы стремитесь, используя постоянные http-соединения.
Прочтите статью о комете в Википедии, это хорошее место для начала.
Вы не предоставляете много информации, но если вы смотрите на создание какого-то сайта, управляемого событиями (например, шпиона Digg) или чего-то подобного, что вы, вероятно, будете смотреть на реализацию скрытого IFRAME, который подключается к URL-адрес, по которому соединение никогда не закрывается, а затем вы отправите скрипт-теги с сервера на клиент для выполнения обновлений.
источник
Возможно, стоит проверить Meteor Server, который является веб-сервером, разработанным для COMET. Хорошая демонстрация, и она также используется twitterfall .
источник
После того, как соединение открыто с сервером, его можно оставить открытым, и сервер может выдвигать контент давным-давно, когда я это делал,
multipart/x-mixed-replace
но в IE это не сработало.Я думаю, что вы можете делать умные вещи с помощью опроса, которые заставляют его работать больше как push, не отправляя содержимое неизменными заголовками, но оставляя соединение открытым, но я никогда этого не делал.
источник
Вы можете попробовать наш компонент Comet - хотя он очень экспериментальный ...!
источник
проверьте эту библиотеку https://github.com/SignalR/SignalR, чтобы узнать, как динамически передавать данные клиентам по мере их доступности.
источник
Вы также можете просмотреть Java Pushlets, если вы используете страницы JSP.
источник
Возможно, стоит посмотреть на ReverseHTTP .
источник