Javascript websocket: описание, действие, употреба

WebSockets (WS) е връзка между сървър и клиент за получаване на информация от страна на сървъра, без да е необходимо предварително да се прави запитване към страната на клиента, като се получава така нареченото PUSH-нотификация. Идеалната комуникационна схема на JavaScript WebSocket би имала една нишка от страна на сървъра, която обработва информация, като например слуша за промени в базата данни или събития, предизвикани от други процеси, за да изпраща информация на всички клиенти едновременно, без да използва ресурси. WebSocket клиент в JS и HTML5, използващ WS интерфейс, осигурен от повечето съвременни браузъри: IE 10+, Chrome 16+, Firefox 11+, Safari 6+.

Определение на WebSockets

Определение на WebSockets

Уебсокетите се определят като двупосочна комуникация между сървър и клиент. Ключът към JavaScript WebSocket е истинският паралелизъм и оптимизацията на производителността, което води до по-отзивчиви и по-богати уеб приложения.

Протоколът установява пълнодуплексна комуникация от нулата. WebSockets са стъпка напред в осигуряването на десктоп функционалност в браузърите. Той демонстрира нов етап от еволюцията, който беше дългоочакван в технологията Интернет клиент/сървър.

Основните характеристики на JavaScript WebSocket са следните:

  1. Протоколът е стандартизиран, което означава, че е възможно да се организира комуникация в реално време между уеб сървъри и клиенти.
  2. Уеб сокетите се превръщат в междуплатформен стандарт за комуникация в реално време между клиент и сървър.
  3. Стандартът дава възможност за нов вид приложения.
  4. С тази технология предприятията в реално време могат да ускорят.

Най-голямото предимство на JavaScript WebSocket е двупосочната комуникация (пълен дуплекс) в рамките на една TCP връзка. HTTP има свой собствен набор от схеми, като http и https. Протоколът за уеб сокети също има подобна схема, дефинирана в неговия URL модел. Последната спецификация на протокола WS е дефинирана като RFC 6455, предложен стандарт. RFC 6455 се поддържа от различни браузъри, като Internet Explorer, Mozilla Firefox, Google Chrome.

Двустранна комуникация

Двустранна комуникация

Преди да преминем към необходимостта от уеб сокети, трябва да разгледаме съществуващите методи, които се използват за двустранна комуникация между клиент и Java WebSocket. Те са следните:

  • гласуване;
  • дълго проучване;
  • стрийминг;
  • Postback и AJAX;
  • HTML5.

Запитването може да се дефинира като метод, който извършва периодични запитвания независимо от данните, съществуващи в предаването. Те се изпращат в синхрон. Отговорът на сървъра включва налични данни или някои предупреждения.

Дългото проучване, както подсказва името, включва подобна техника на проучване. Клиентът и сървърът поддържат активна връзка, докато не получат данни или не изтече времетраенето. Ако по някаква причина връзката бъде изгубена, Java клиентът WebSocket може да започне отначало и да изпълни следваща заявка. Продължителното анкетиране не е нищо друго освен подобрение на производителността на процеса на анкетиране, но непрекъснатото анкетиране може да забави процеса.

Опции за стрийминг и AJAX

Това се счита за най-добрия вариант за предаване на данни в реално време. Сървърът поддържа отворена и активна връзка с клиента, докато не получи необходимите данни. В този случай връзката се счита за отворена за неопределено време. Поточното предаване включва HTTP заглавия, което увеличава размера на файла и латентността. Това може да се разглежда като основен недостатък.

Това е съкратена форма на асинхронни Javascript и XML. Обектът XmlHttpRequest позволява изпълнението на Javascript, без да се презарежда цялата уеб страница. AJAX изпраща и получава само част от уеб страницата. Основните недостатъци на AJAX в сравнение с уебсокетите на JavaScript са:

  1. Изпраща HTTP заглавия, което увеличава общия размер.
  2. Полудуплексна комуникация.
  3. Уеб сървърът изразходва повече ресурси.

HTML5 е надеждна рамка за разработване и проектиране на уеб приложения. Основните стълбове са API за маркиране, CSS3 и Javascript.

Функционалност

Функционалност

WebSocket представлява важна иновация в историята на уеб комуникацията. Преди да се появи, цялата комуникация между уеб клиентите и сървърите се основаваше само на HTTP. Уеб сокетът помага за динамичен поток от връзки, които са постоянни, пълнодуплексни. Пълен дуплекс означава комуникация в двата края със значителна скорост. Това се нарича промяна на правилата, защото ефективно преодолява всички недостатъци на съществуващите протоколи.

Значението на WS за разработчиците и архитектите:

  1. Независим протокол, базиран на TCP, предназначен за поддръжка на всеки друг протокол, който традиционно работи само върху чиста TCP връзка.
  2. Транспортен слой, върху който може да работи всеки друг протокол.

API на Websocket поддържа възможност за дефиниране на подпротоколи, библиотеки за протоколи, които могат да интерпретират определени типове протоколи. Примери за такива протоколи са XMPP, STOMP и AMQP. Разработчиците вече не трябва да мислят за вида на връзката в контекста на парадигмата HTTP заявка-отговор.

Единственото изискване от страна на браузъра е той да разполага с библиотека на JavaScript, която може да интерпретира WS handshake и да установява и поддържа връзката. От страна на сървъра индустриалният стандарт е да се използват съществуващите библиотеки за протоколи, които работят върху TCP и използват шлюза.

Функционалност на WebSocket:

  1. Връзките чрез WebSocket се инициират чрез HTTP.
  2. HTTP сървърите обикновено интерпретират WS ръкостисканията като заявка за актуализация.
  3. WebSockets могат да бъдат разширение на съществуващата HTTP среда и да предоставят необходимата инфраструктура за добавяне на уеб функционалност. Те разчитат на по-усъвършенствани протоколи с пълен дуплекс, които позволяват предаване на данни в двете посоки между клиента JavaScript WebSocket и сървъра.

Реализация на клиент в JavaScript

Изходният код на JavaScript файла с име wsclient.js включва HTML5 в страница, така че да може да отваря WebSocket връзка. Скриптът съдържа код за създаване на WS клиент чрез неговия интерфейс.

За създаване на формуляр за свързване с крайната точка на сървъра и обмен на съобщения се използва проста страница HTML5. HTML страницата използва wsclient.js, за да стартирате HTML файла, отворете го в браузър, например в Google Chrome, като изберете "File -> "Open".

Един прост сървър може лесно да бъде реализиран в Java. Той просто връща съобщението, получено от клиента, с главни букви:

  1. Отворете формата wsclient.html в уеб браузъра си и въведете необходимите настройки за WebSocket връзката, след което щракнете върху бутона "Connect". Ако връзката е установена успешно, бутонът ще бъде деактивиран, а бутонът "Disable" ще бъде активиран.
  2. Те ще въведат съобщението в полето "Текст на съобщението" и ще кликнат върху бутона "Изпрати". Сървърът ще го покаже с главни букви, а клиентът на JavaScript ще го покаже в областта за текст.
  3. "Инструменти за разработчици" Google Chrome е добър инструмент за изследване на WebSocket връзки. В прозореца "Инструменти за разработчици" отива в раздела "Мрежа" и изберете WS, за да видите списък с всички връзки за текущата страница.
  4. Щракнете върху раздела Header, за да видите стойностите на заявката и отговора.
  5. В раздела Кадри са изброени всички изходящи и входящи съобщения. Първото съобщение е това, което е изпратено от клиента към сървъра, а второто съобщение е ехото на сървъра с главни букви.
  6. Табът "Време" показва колко време е била отворена връзката.
  7. Конзолата се използва за преглед на текущата инстанция на WS, който се намира в рамките на страницата HTML.
  8. Въведете името на променливата JavaScript WebSocket, WS и конзолата ще отпечата JSON представяне на обекта.
  9. Състояние на готовност. Свойството на обекта показва състоянието на връзката. Стойност 1 означава, че тя е отворена и готова да получава и изпраща съобщения. Може да се използва да проверявате WS връзка, преди да се опитате да прехвърлите данни. Ако връзката е затворена, може да има логика за автоматичното й възстановяване.
  10. Wireshark е много изчерпателен и полезен инструмент за наблюдение на мрежовия трафик. Може да се изтегли безплатно от официалния сайт. След като го инсталирате, стартирайте го и изберете мрежовия интерфейс за улавяне на трафика.
  11. За да видите само WS трафик, въведете websocket в полето за филтриране. Кликнете върху рамка, за да видите съдържанието, включително действителния полезен товар на съобщението. Превъртете надолу до възела за текстови данни, базиран на линии, и го разположете.
  12. Кликнете с десния бутон на мишката върху компресирания полезен товар и изберете "Show package bytes". В диалоговия прозорец изберете "Compressed" от падащия списък "Decode", за да видите полезния товар като обикновен текст.

Конфигуриране на Java WebSocket spring

Конфигуриране на Java WebSocket spring

Spring-boot-starter-websocket - предоставя полезни стойности по подразбиране за WS. Първо, конфигурирайте брокера на съобщения STOMP. Това е WebSocketConfig.Java дефиниране на крайна точка на брокера на съобщения STOMP и крайна точка на приложение websocket.@Configuration - конфигурационен клас на Spring.

EnableWebSocketMessageBroker - активира обработката на съобщения, поддържана от брокера на съобщения. Използва се STOMP като брокер на съобщения.

Методът ConfigureMessageBroker () позволява на прост медиатор, базиран на паметта, да предава съобщения на клиента по предназначение с префикси "/topic" и "/queue". Той също така поставя префикс "/app" за тези, които са свързани с невалидираните методи на @Message Mapping в класа на контролера. Този префикс ще се използва за определяне на всички съпоставки на съобщения. Например "/app/message" е крайната точка, за която е съпоставен методът на WebSocket Controller.processMessage От Client ().

По подобен начин RegisterStompEndpoints () активира поддръжката на STOMP и регистрира крайни точки на stomp в "/app". Всички съобщения от уеб сокети на JavaScript ще бъдат пренасочвани през STOMP, което също така добавя допълнително ниво на сигурност към крайната точка на уеб сокета. При създаване на WS връзка от javascript се използва само тази конкретна крайна точка на Stomp.

В конфигурацията по-долу, за да се активира поддръжката на SockJs за осигуряване на опционално обратно действие, трябва да се направят следните промени.addEndpoint ("/hello") .withSockJS ().

Предимството на използването на sockJS тук е, че когато връзката с уеб сокет е прекъсната или не може да бъде установена, тя ще бъде прехвърлена към HTTP и комуникацията между клиента и сървъра ще може да продължи.

Конфигуриране на Java WebSocket spring

Обработка на грешки

След като се установи връзка между клиент и сървър, се задейства събитие Open от инстанция WS. Грешките, които възникват по време на комуникацията, се генерират. Това се определя със събитието OnError. Грешката винаги е последвана от отказ на връзката.

OnError е събитие, което се извиква, когато нещо се обърка между комуникациите. Грешка при събитие е последвана от прекратяване на връзката. Препоръчва се винаги да информирате потребителя за неочаквани грешки и да се опитате да възстановите връзката.

Когато става въпрос за обработка на грешки, трябва да се вземат предвид както вътрешни, така и външни параметри:

  1. Вътрешните параметри включват грешки, които могат да бъдат генерирани поради грешки в кода или неочаквано поведение на потребителя.
  2. Външните грешки не са свързани с приложението, а по-скоро с параметри, които не могат да бъдат контролирани. Най-важната от тях е мрежовата връзка.
  3. Всяко интерактивно двупосочно уеб приложение изисква активна интернет връзка.

Проверка на наличността на мрежата

Проверката на наличността на мрежата е често срещана задача в съвременните настолни и мобилни приложения. Най-често срещаният начин за WebSocket php JavaScript - направете HTTP заявка към уебсайт, който трябва да бъде активиран, напр. Google.com. Ако заявката се изпълни успешно, настолното или мобилното устройство съобщава, че съществува активна връзка. По подобен начин HTML разполага с XMLHttpRequest, за да определи дали дадена мрежа е налична.

От друга страна, HTML5 направи този процес още по-прост и въведе начин за проверка дали браузърът може да получава уеб отговори. Това се постига с помощта на навигатора за обекти.

Проверка на наличността на мрежата

Офлайн означава, че устройството не е свързано или че потребителят е избрал офлайн режим от лентата с инструменти на браузъра.

Тестването на Java WebSocket използва прост WS-клиент. След като връзката е установена, тя изпраща данните към сървъра и отпечатва получения отговор: import websocket.

Тестване на Java WebSocket

Събитията OnOpen, OnClose и OnMessage

WebSocket сървърът е проста програма, която може да обработва WS събития и действия. Обикновено той предоставя методи, подобни на клиентския API. Въпреки това, повечето от езици за програмиране осигурява осъществяването на комуникация между сървъра и WebSocket клиента, като подчертава задействаните събития и действия.

Сървърът WebSocket работи по подобен начин като клиентите на. Реагира на събития и при необходимост изпълнява действия. Независимо от използвания език за програмиране, всеки WebSocket сървър изпълнява определени процедури. Той се инициализира на адреса на уеб сокета, обработва събитията OnOpen, OnClose и OnMessage и изпраща съобщения до клиентите. Съществуват четири основни събития на API Websocket:

  • са отворени;
  • съобщение;
  • затворен;
  • грешка.

Всяко от събитията се обработва чрез прилагане на функции, като например OnOpen, OnMessage , OnClose и OnError. Това може да се реализира и чрез метода addEventListener.

Инстанция на WebSocket в Java

Всеки WS сървър изисква валиден хост и порт. Пример за създаване на инстанция на Websocket на сървъра: var server = new WebSocketServer("ws://localhost:8181").

Всеки валиден URL адрес може да се използва със спецификация на порта, която не е била използвана преди. Много е полезно да се води регистър на свързаните клиенти, тъй като той събира и съхранява различни данни или изпраща различни съобщения до всеки клиент.

Fleck представя входящите връзки (клиенти) на интерфейса IwebSocketConnection. Всеки път, когато някой се свързва или прекъсва връзката си с услугата, може да се създаде или актуализира празен списък: var clients = new List ().

След това извикайте метода Start и изчакайте клиентите да се свържат. Веднъж стартиран, сървърът може да приема входящи връзки. Във Fleck методът Start се нуждае от параметър, който посочва гнездото, което задейства събитието: server.Start(сокет) =>{});

За да реализирате WebSocket сървър в C#, трябва да използвате външна библиотека. За да се получи същият резултат в Java, се използва технологията, включена в стандартната библиотека чрез пакета javax.Websocket, като се започне с Java EE 7.

Създаване на клиентски проект за Java WebSocket, базиран на Java EE 7, с помощта на някой от безплатните онлайн IDE, като Eclipse и NetBeans. В NetBeans създайте ново уеб приложение и се уверете, че използвате GlassFish като сървър (версия 4.0). Ако потребителят предпочита да използва Eclipse, той ще трябва да избере Tomcat 8. И така, дефинирайте пакет с име MyServer и създайте в него клас WebSocket Server. Кодът за реализиране на сървъра е доста четим и поведението му е лесен за разбиране.

Пример за уеб сокети в Java

Предимства на уеб гнездото

WS решава няколко проблема с REST или HTTP. HTTP е еднопосочен протокол, при който клиентът винаги инициира заявката. Сървърът обработва и връща отговора, след което клиентът го използва. Уебсокетът е двупосочен протокол без предварително дефинирани модели на съобщения, като например заявка/отговор. Клиентът или сървърът могат да изпратят съобщението до другата страна.

HTTP позволява съобщението за заявка да се изпрати от клиента до сървъра, след което сървърът изпраща отговор. В определен момент от време клиентът комуникира със сървъра или обратното. Обикновено се инициира нова TCP връзка за HTTP заявка и се прекъсва след получаване отговор. За другата HTTP заявка/отговор трябва да се установи нова TCP връзка.

За WS HTTP връзката се актуализира чрез стандартния механизъм за актуализация. Клиентът и сървърът обменят данни по една и съща TCP връзка в рамките на жизнения цикъл на WS връзката.

Websocket е протокол от ниско ниво. Всичко, включително прост шаблон за заявка/отговор, как да създавате, актуализирате и изтривате необходимите ресурси и кодове за състояние. Всички те са внимателно определени за HTTP.

WS е държавен протокол, докато HTTP е недържавен протокол.

WS връзките могат да се мащабират вертикално на един сървър, докато HTTP може да се мащабира хоризонтално. Съществуват няколко патентовани решения за хоризонтално мащабиране, но те не се основават на стандарти.

HTTP има и много други предимства, като кеширане, маршрутизиране и мултиплексиране. Всичко това трябва да бъде дефинирано върху WebSocket и базата данни Java.

Статии по темата