Здесь много аспектов. События, отправленные сервером, JavaScript Streams API - это в основном API-интерфейсы браузера для протоколов более низкого уровня.
Связь между серверами
Связь между серверами с использованием веб-сокетов и HTTP / 2 имеет аналогичные свойства. Оба являются бинарными и эффективными протоколами. HTTP / 2 обеспечивает обратное давление для каждого потока, что может быть важно для клиентов, которые получают сообщения pu sh из нескольких источников или могут быть заняты время от времени. gRP C является платформой поверх HTTP / 2 и обеспечивает более высокую абстракцию для разработчика.
Обмен данными между сервером и браузером
Отправленные сервером события
Отправленные сервером события - это способ для клиента подписаться на поток событий и непрерывно получать события от сервера. API является более высокой абстракцией и проще в использовании, чем альтернативы. Однако формат представляет собой указанный формат сообщения в текст .
Разработка веб-приложения, использующего отправленные сервером события, проще, чем с помощью веб-сокетов. Вам понадобится немного кода на сервере для потоковой передачи событий во внешний интерфейс, но код на стороне клиента работает почти идентично обработке любого другого события.
Пример кода
const evtSource = new EventSource("/v1/stream/topic");
evtSource.onmessage = function(event) {
// handle event
}
JavaScript API потоков
JavaScript API потоков - это более новый JavaScript API для поддержки двоичных потоков между браузером и сервером. Это можно использовать с более новыми ReadableStream из Fetch API . Поскольку это двоичный поток, он может иметь более широкий вариант использования и может быть важен для приложений, использующих, например, веб-сборку, в ближайшие годы.
API-интерфейс немного сложнее. Пример кода:
fetch("https://www.example.org/").then((response) => {
const reader = response.body.getReader();
const stream = new ReadableStream({
start(controller) {
// implementation
}
})
Преимущество двоичного потока состоит в том, что он может использоваться для естественно двоичных данных, например аудио или двоичных представлений пользовательских форматов.
Использование JavaScript Streams API on HTTP / 2 или HTTP / 3 Streams имеет преимущество перед альтернативами в том, что он поддерживает противодавление на поток (не только на соединение TCP).
gRP C
gRP C - это протокол, использующий потоки HTTP / 2, но он не реализован в API-интерфейсе JavaScript Streams, поэтому для связи через браузер ему требуется промежуточное программное обеспечение, например grp c -web .
WebSockets
WebSockets - это абстракция более низкого уровня, расширенная поддержка браузеров и полнодуплексная связь. Но так как это абстракция более низкого уровня, для взаимодействия с ней часто требуются библиотеки.