Сведения о вопросе

ЧОВИД

21:06, 1st October, 2020

Теги

ajax   webserver   comet    

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

Просмотров: 457   Ответов: 18

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

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



  Сведения об ответе

VCe znayu

01:17, 6th August, 2020

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


  Сведения об ответе

ASSembler

14:33, 2nd August, 2020

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


  Сведения об ответе

baggs

04:27, 20th August, 2020

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


  Сведения об ответе

prince

15:48, 15th August, 2020

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

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


  Сведения об ответе

lesha

11:41, 20th August, 2020

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


  Сведения об ответе

lourence

10:39, 20th August, 2020

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

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

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

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

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

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

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

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


  Сведения об ответе

ЯЯ__4

01:22, 21st August, 2020

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


  Сведения об ответе

park

17:57, 20th August, 2020

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


  Сведения об ответе

DINO

21:06, 1st October, 2020

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


  Сведения об ответе

FAriza

21:32, 19th August, 2020

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


  Сведения об ответе

prince

20:00, 4th August, 2020

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


  Сведения об ответе

baggs

03:06, 11th August, 2020

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

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

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


  Сведения об ответе

FAriza

11:43, 21st August, 2020

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


  Сведения об ответе

#hash

12:31, 5th August, 2020

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

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


  Сведения об ответе

FAriza

23:29, 16th August, 2020

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


  Сведения об ответе

PROGA

02:25, 27th August, 2020

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


  Сведения об ответе

прога

22:56, 27th August, 2020

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


  Сведения об ответе

screen

00:43, 8th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться