2016-11-13 2 views
3

Этот вопрос очень похож на этот вопрос: What is the difference between web sockets, long polling, server-sent events and forever frame?В чем разница между событиями Forever-frame и сервера?

Однако в ответе на этот вопрос не упоминается разница между SSE и Forever-frame.
Позвольте мне кратко рассказать о них.

Что касается SSE, система действительно напоминает Comet, но точка, которая отличается от Comet, не нарушает соединение после отправки данных. Итак, соединение с сервером для клиента является долгоживущим, и клиент получает ряд фрагментов целого данных.

С другой стороны, навсегда рамка кажется очень похожей на меня. В кадре Forever сначала клиент получает страницу, включая тег iframe, устанавливая долговременное соединение внутри скрытого iframe. А затем клиент получает данные с сервера и манипулирует DOM с некоторыми функциями в первом документе, который уже имеет клиент.

Я предполагаю, что разница заключается в том, что Forever-frame использует тег iframe в механизме, но SSE этого не делает, и SSE может быть реализовано больше способов. Я прав?

ответ

2

Я не слышал о Forever-frame от этого имени раньше! (Это описано в главе 7 моей книги «Приложения для передачи данных с помощью HTML5 SSE» в разделе «iframe»).

Длительный опрос: сделать запрос (используя XMLHttpRequest, т. Е. Ajax), держать его открытым, пока данные не будут готовы на сервере. Затем сокет закрывается. Повторно подключитесь, чтобы получить следующий бит данных.

Опрос XHR: сделать запрос (используя XMLHttpRequest2, то есть ajax), но слушать сигналы readyState == 3. Внутренний сервер должен знать, чтобы открыть соединение, и клиент должен знать, чтобы прослушать readyState == 3. (Не работаю в IE9 и раньше, потому что браузер никогда не доставляет readyState == 3 сообщения, но идет прямо к readyState == 4)

IFRAME: открыть скрытый IFRAME к фоновому процессу. Регулярно переходите к исходному коду iframe и смотрите, есть ли что-то новое. (Технически это работает во всех браузерах, но IE8 и IE9 были единственными в моих (2013) тесты с достаточно низкой задержкой для обновления, чтобы быть полезным.)

SSE: это стандарт HTML5, который в основном работает как XHR опрос (Firefox и Chrome, по крайней мере, реализовать его непосредственно поверх XMLHttpRequest2), но с сложными подробностями, скрытыми от вас. Он также добавляет автоматическое повторное подключение, если сокет идет вниз, и несколько других высокоуровневых функций.

В конце главы 7 вышеупомянутой книги я показываю код, чтобы все методы работали практически в любом браузере. Порядок предпочтений является:

  • SSE при наличии
  • еще XHR при наличии
  • еще IFrame, если IE8 или IE9
  • еще longpoll

Существует еще одна разница: XHR и методы iframe сохраняют всю историю сообщений в памяти.Таким образом, если вы намерены держать сокет открытым в течение длительного времени и/или отправлять большое количество больших сообщений, это может вызвать проблемы с памятью, которые не произойдут с SSE.

Резюме: Не беспокойтесь о «навсегда», если у вас недостаточно клиентов, которые все еще используют IE8/IE9, что подход longpoll создаст заметную дополнительную нагрузку на вашу инфраструктуру.

+0

Благодарим вас за обзор этих технологий. Однако в некоторых случаях все еще не ясно. 1: Я не уверен в различии между длинным опросом и опросом XHR. Я googled слово «опрос XHR», но я не мог найти никакой хорошей информации об этом. Как вы упомянули, разница в том, что Long-poll использует XMLHttpRequest1, где XML-опрос делает XMLHttpRequest2? 2: На опросе XHR, с какой стороны посылаются сигналы ReadyState? С серверной стороны? Или клиент? 3: Что вы подразумеваете под словом «автоподключение»? Это означает, что после того, как сервер отправит данные, соединение прерывается один раз? –

+0

@ KazuyaTomita Это слишком дерзко, чтобы предложить покупать мою книгу - достаточно места, чтобы полностью освещать эти темы :-) Разница между обычным длинным опросом и тем, что я назвал «xhr», является первым, использующим readyState == 4, в то время как последний использует readyState == 3. ReadyState является частью клиентского JavaScript XMLHttpRequest2 API. –

+0

Итак, ваше утверждение об объяснении длинного опроса и XHR-опроса в ответ неверно, потому что оба используют XMLHttpRequest2 в соответствии с вашим дополнительным комментарием? И если все в порядке, пожалуйста, дайте мне краткое объяснение вопроса3. –