Въведение в SSE
SSE означава Server-Sent Events, което буквално означава, че сървърът изпраща информация към клиента. SSE е еднопосочен канал,Сървърът може да изпраща информация само към клиентаКлиентът може да получи SSE заявката само след първото задействане и не може да отговори.
Ключови характеристики на SSE включват:
- Лесна употреба: SSE използва текстови формати като обикновен текст, JSON и др., което прави изпращането и анализирането на данни относително лесно.
- Еднопосочна комуникация: SSE поддържа еднопосочна комуникация между сървъра и клиента, при която сървърът може активно да изпраща данни към клиента, докато клиентът може да получава само данните.
- В реално време: SSE установява дългосрочни връзки, позволявайки на сървърите да изпращат данни към клиентите в реално време без чести заявки.
SSE срещу WebSocket
WebSocket е друга уеб технология, използвана за осигуряване на двупосочна комуникация в реално време, която се различава от SSE по някои отношения. Ето сравнение между SSE и WebSocket:
- Посока на подаване на данни: SSE е еднопосочна комуникация между сървъра и клиента, като сървърът може активно да изпраща данни към клиента. WebSocket, от друга страна, е двупосочна комуникация, която позволява двупосочен обмен на данни в реално време между сървъра и клиента.
- Установяване на връзка: SSE използва дълги HTTP-базирани връзки, за да установи връзки чрез обикновени HTTP заявки и отговори, като по този начин предоставя данни в реално време. WebSockets използват персонализирани протоколи за осигуряване на двупосочна комуникация чрез установяване на WebSocket връзки.
- Съвместимост: Тъй като SSE е базиран на HTTP протокола, може да се използва в повечето съвременни браузъри и не изисква допълнителни ъпгрейди на протокола. WebSockets се поддържат и в огромното мнозинство съвременни браузъри, но могат да бъдат проблемни в някои специални мрежови среди.
- Приложими сценарии: SSE е подходящ за ситуации, в които сървърът изпраща данни към клиента в реално време, като актуализации на цените на акциите, новини в реално време и др. WebSocket е подходящ за ситуации, които изискват двупосочна комуникация в реално време, като чат приложения и многолично съвместно редактиране.
- В зависимост от конкретните бизнес нужди и ситуации, изборът на SSE или WebSocket зависи от реалните ви нужди. Ако ви трябва сървър само за изпращане на данни към клиентите в една посока и искате да го запазите прост и съвместим, SSE е добър избор. Ако трябва да постигнете двупосочна комуникация или по-напреднали функции и управление, WebSocket може да е по-подходящ за вашите нужди.
Формат на събитията на SSE
Потокът от събития е прост поток от текстови данни, който трябва да бъде кодиран във формат UTF-8. Поток от събитияСъобщението е разделено от двойка прекъсвания на редовете。 Редовете за коментари за поведение, които започват с двоеточие, се игнорират. Всяко поле се представя с име на поле, последвано от двоеточие, и след това текстови данни за стойността на това поле.
Полетата са както следва:
събитие: Низ, използван за идентифициране на типа събитие. Ако този низ е зададен, браузърът изпраща събитие с зададеното име на събитието към съответния слушател; Клиентът трябва да използва addEventListener(), за да слуша зададеното събитие. Ако съобщението не уточнява име на събитие, тогава обработващият onmessage може да бъде извикан.
данни: Данното поле на съобщението. Когато EventSource получи няколко последователни реда, започващи с data:, той ги конкатенира, като вмъква прекъсване на линия между тях. Прекъсването на линията в края е премахнато.
id: Event ID, който става стойността на свойството на вътрешното свойство на текущия обект EventSource "Last Event ID".
Опитайте: време за възстановяване на връзката. Ако връзката със сървъра бъде загубена, браузърът ще изчака определеното време и след това ще се опита да се свърже отново. Това трябва да е цяло число, което определя времето за повторно свързване в милисекунди. Ако се зададе нецелочислена стойност, полето се игнорира.
Instance EventSource
Интерфейсът EventSource е интерфейсът между уеб съдържанието и сървъра за изпращане на събития.
Свойство EventHandler
EventSource.onopen се извиква, когато връзката е отворена. EventSource.onmessage се извиква, когато съобщение бъде получено без атрибут на събитието. EventSource.onerror се извиква при изключения на връзката.
SSE сървър (ASP.NET Core)
Създайте нов проект за ASP.NET Core с .NET 8 и кодът на контролера е следният:
За клиента, който установява връзката, изпращайте съобщение на всеки втори интервал.
SSE клиент
Пишете клиентски код в страницата View, използвайки html и js по следния начин:
Започнете проекта със следните ефекти:
Препратка:
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим. |