Как работает подписка на http-запрос?

Как работает метод подписки, когда http-клиент запрашивает данные с конечной точки?

Работает ли он как HTTP с одним запросом? Что делать, если источник в конечной точке имеет новые данные, а подписка показывает их после первого вызова?


person Community    schedule 18.05.2020    source источник
comment
Вы можете проверить Изучение HttpClientModule в Angular.   -  person Andrei Gătej    schedule 19.05.2020


Ответы (1)


Каждая HTTP-наблюдаемая в Angular завершается после первого ответа (docs ). Вы можете проверить это с помощью следующего кода:

http.get('/some/url').subscribe(
  (data) => console.log('Data received:', data),
  (err) => console.log('Error received:', err),
  () => console.log('Observable completed and will not emit any data ever again.')
);
person Robin De Schepper    schedule 19.05.2020
comment
Итак, клиентские системы не знают о новых изменениях источника после завершения? - person ; 19.05.2020
comment
Нет, поскольку HTTP является однонаправленным протоколом, только клиент может инициировать связь, отправив сообщение запроса, а сервер может ответить только одним ответом (возможно, некоторые исключения, например, фрагментированные ответы). Чтобы сервер мог уведомлять клиента о новых данных, необходим другой протокол, например WebSocket. - person Robin De Schepper; 19.05.2020
comment
Другой способ обойти это без перехода на WebSockets - это методы опроса и длительного опроса. При опросе вы периодически снова спрашиваете сервер, изменилось ли что-то, при длительном опросе вы спрашиваете и ждете ответа, а сервер отвечает только тогда, когда что-то изменилось, затем вы снова спрашиваете, ожидая следующего изменения. - person Robin De Schepper; 19.05.2020
comment
Как же тогда работают системы, где нужно отправить миллион сообщений миллионам онлайн-пользователей, как это работает в приложениях такси? Когда заказ рассылается всем миллионам водителей - person ; 19.05.2020
comment
У них очень большие серверы :) И они разрабатывают масштабируемые решения: они не будут отправлять все заказы ВСЕМ своим драйверам, только 100 ближайшим доступным. Но все большие приложения реального времени, вероятно, используют WebSocket, но я не являюсь авторитетом в этих вещах. Я просто использую HTTP и WS, чтобы бездельничать :) - person Robin De Schepper; 19.05.2020
comment
Отправка миллионов сообщений миллионам пользователей, вероятно, позволит вам стать таким техническим гигантом, как Facebook или WhatsApp. - person Robin De Schepper; 19.05.2020
comment
Вы знаете какие-нибудь учебники по этому поводу? - person ; 19.05.2020
comment
Опрос: nehalist.io/polling-in-angular/#component WebSocket (низкий level): blog.angulartraining.com/ WebSocket (API более высокого уровня socket.io): npmjs.com/package/ngx -socket-io Отказ от ответственности: я сопровождаю 0 коммитов в последнем связанном пакете. - person Robin De Schepper; 19.05.2020
comment
Для длительного опроса вы просто опрашиваете клиентскую сторону, и каждый раз, когда у вас истекает время ожидания или когда вы получаете ответ, вы опрашиваете снова. На стороне сервера вы должны заблокировать отвечающий поток до тех пор, пока не произойдет изменение или тайм-аут. Но я бы сказал, что это самый сложный маршрут, не имеющий для вас реальных преимуществ. - person Robin De Schepper; 19.05.2020