Автор оригинала: FreeCodeCamp Community Member.
Был момент времени, когда мы не ожидали слишком много с веб-страниц. Что напоминает мне, сайт Movie Space Jam по-прежнему находится в Интернете в своей первоначальной форме. И это использует Frameset Отказ Не Iframes. Рамы Отказ
Космический джем Space Jam, персонажи, имена и все связанные с ними индикации являются товарными знаками Warner Bros. © 1996 www.warnerbros.com.
У Warner Bros есть некоторые нежно использованные копии Dreamweaver MX.
Это было 1996 год. Это 2019 год. Времена изменились, и пользователи ожидают намного больше из веб-сайтов. Они не просто ожидают, что они будут хорошо выглядеть, они ожидают, что они будут полны приложения, и это включает в себя в режиме реального времени.
Приложения в реальном времени
Приложения в режиме реального времени – это те, которые реагируют на изменения в любом месте в системе подключенного приложения – не только те, которые выполняются текущим пользователем.
Канонический пример в режиме реального времени – это приложение обмена сообщениями. Вроде, когда вы отправляете группу друзей в текстовое сообщение о том, чтобы собраться вместе для крыльев в пятницу. Затем обновите каждые минуту в минуту с возможностью добычи от работы в баре. Спасибо, Тревор. Теперь мы все в ловушке в аду уведомлении, что мы не подписались. Я просто хотел несколько крыльев.
Когда дело доходит до веб, существует несколько разных шаблонов, технологий, библиотек и услуг, которые вы можете использовать для получения функциональности в режиме реального времени, которая обычно зарезервирована для нативных приложений. Недавно я сел с Энтони Чу, который дал мне 5 способов, чтобы вы могли создать приложения в реальном времени в JavaScript.
Энтони Чу # MMSigniteThetour (@nthonychu) | Twitter Последние твиты от Энтони Чу # MMSignitethetour (@nthonychu). Облачный адвокат @microsoft. Azure, ASP .NET, Node.js … twitter.com.
1. Долговысокое
Это когда приложение запрашивает обновления с сервера в расписании. Приложение является «опросом» сервера.
Это чистый эквивалент дети, спрашивающих “мы там еще?” каждые пять минут. Это похоже на то, что мы там, ребенок? Спросите меня еще раз, и я клянусь вам, что я брошу эту копию «фильма пчелы» в канаве, и вы можете смотреть в окно на траве, как мы сделали, когда я был ребенком.
Долгопроизводство может быть реализована вручную с любой HTTP-библиотекой JavaScript, такая как jQuery или Axios. Я никогда не реализовал это сам. При выполнении некоторых исследований для этой статьи я обнаружил, что лучший способ сделать это – использовать рекурсивную функцию с Сетримс
Отказ Это потому, что используя Setinterval
Не учитывает запросы, которые не удаются или время ожидания. Вы можете в конечном итоге с помощью группы AJAX, которые все обработаны из строя.
Вот пример из самой хорошей статьи на Tech Octave Отказ
(function poll(){ setTimeout(function(){ $.ajax({ url: "server", success: function(data){ //Update your dashboard gauge salesGauge.setValue(data.value); //Setup the next poll recursively poll(); }, dataType: "json"}); }, 30000); })();
Существуют также библиотеки, такие как Pollemer (не путать с полимером), которые специально для длительного опроса. Возьми? «Опрос» Yмер? Потому что это опросы? Это на?
Велосипед/Pollemer Библиотека общего назначения AJAX/Long-Peail. Способствуйте разработку Vanout/Pollemer, создавая учетную запись на GitHub. github.com.
Долгий опрос хорош, потому что он работает в каждом браузере; даже супер старые. Это плохо, потому что это супер неэффективно, а не совсем «в режиме реального времени». Он также имеет некоторые странные краевые случаи (например, сбои запроса), которые вы должны программировать, как мы уже видели с Setinterval
Отказ
Лучшая альтернатива для долгого опроса – серверные события или SSE.
2. Серверные события
Сервер, отправленные событиями (SSE) аналогичны долгом, так как клиент просит сервер для информации. Большая разница состоит в том, что с SSE сервер просто открывает соединение. Когда происходит событие, и есть информация для отправки клиенту, сервер отправляет событие клиенту.
Сервер, отправленные событиями Традиционно веб-страница должна отправить запрос на сервер для получения новых данных; То есть страница запрашивает данные из … Developer.mozilla.org.
Вернувшись в нашу «путешествие из ада» аналогии, это было бы, если бы ребенок сказал: «Мы там еще?», А затем терпеливо ждал вашего ответа. Четыре возвышенные часы молчания позже вы прибываете на пункт назначения, оборачиваются, и говорите «да». Это самый нереальный сценарий, который я когда-либо придумал в своей жизни.
SSE является частью браузера Регуляторы
API. Обратите внимание, что в соответствии с Caniuse.com , ни IE 11, ни краевые опоры SSE. Это делает его вроде жесткой технологии, однако, это интересно.
Хорошая новость заключается в том, что в значительной степени каждый браузер поддерживает веб-розетки.
3. Веб-розетки
Веб-розетки – это технология, которая облегчает настоящий двусторонний канал связи между клиентом и сервером. В отличие от серверов, отправленных на сервер события, что является только связь от сервера к клиенту, веб-розетки могут использоваться для связи в обоих направлениях.
Веб-розетки, э-э-элбоз. Они на самом деле не такие API, с которыми вы хотите создавать приложения. Вид как ты мог бы Сделайте HTTP-запрос с XHR объект , но божественный нет. Я гугламил «PHP Web Socket образец» и нашел эту дози из документов PHP. Я увеличил весь выход в хроме и едва получил все в одном скриншоте.
И это только часть сервера. Вы все еще должны провести браузер.
Итак …that’s A нет для меня.
К счастью, есть много библиотек, которые абстрактные веб-розетки еще дальше, так что вам не нужно писать ни одно из этого. Один из этих библиотек называется «SIGNALR».
4. Сигнал
Сигнал является библиотекой, которая реализует веб-розетки как в JavaScript, так и в .NET. На сервере вы создаете то, что известно как «HUB» в Signalr. Этот концентратор отправляет и получает сообщения от клиентов.
Затем клиенты подключаются к концентратору (используя библиотеку JavaScript Signalr javaScript) и отвечать на события из концентратора или отправлять свои собственные события в концентратор.
Сигнал также отступает к длинному опросу, когда веб-розетки недоступны. Хотя это не супер, если вы не используете IE 9 или ниже.
Вот пример настройки Synyr на сервере …
using System; using System.Web; using Microsoft.AspNet.SignalR; namespace SignalRChat { public class ChatHub : Hub { public void Send(string name, string message) { // Call the broadcastMessage method to update clients. Clients.All.broadcastMessage(name, message); } } }
Ладно ладно. Я знаю, что это не яблоки для сравнения яблок с примером PHP сверху, но я пытаюсь сделать точку здесь. Просто иди с этим. Сделать это для меня. У меня тяжелое утро.
Таким образом, Siverr делает его более весело программировать веб-сокеты, но вы знаете, что еще веселее, чем их программирование? Не программировать их.
5. Azure Signalr.
Часто, когда мы хотим настроить приложения в реальном времени, построение сервера веб-сокета не совсем не добавленная стоимостью. Мы делаем это, но только потому, что мы должны получить в режиме реального времени. Мы бы предпочли, чтобы это «только что работало».
Azure Synivicr – именно это. Это сигнализирующий концентратор, который вы можете потреблять по требованию как услугу. Это означает, что вам нужно только отправлять и отвечать на события – это то, что вы после первого места.
Что такое Azure Syvicler Обзор службы Azure Syvicler. docs.microsoft.com.
Вы создаете HUB Signalr в Azure в качестве службы Azure, а затем просто подключаетесь к нему с клиента и отправляют/получать сообщения.
И теперь вы знаете …
Проверьте интервью ниже с Энтони. Мы застрелили это в Вегасе, пока мы оба были на конференции, и хорошо провели время с париком, который я купил на вечеринке. Лучший 8 $, я когда-либо проводил.