Size: a a a

2020 July 20

VM

Vladislav Milenin in Go-go!
у фейсбука такая штука поверх mqtt реализована, довольно круто
источник

DP

Daniel Podolsky in Go-go!
Vladislav Milenin
почему?
потому, что SSE, все же, просто растянутый во времени ответ на запрос клиента
источник

d

dmitriy in Go-go!
Daniel Podolsky
потому, что SSE, все же, просто растянутый во времени ответ на запрос клиента
вы описали лонг полинг, а там написано, что это совсем не он)
источник

ВС

Владимир Столяров... in Go-go!
ну отличий не то чтобы много
источник

DP

Daniel Podolsky in Go-go!
Владимир Столяров
ну отличий не то чтобы много
лонг полинг предполагает запрос на каждую новую порцию инфы, а sse позволяет выдавать новые порции по инициативе сервера

вообще-то, так можно было делать и без sse, пропихивая очередной <script>…</script> с неким интервалом. мы так в 2010, кажется, прогрессбар рисовали на клиенте, пока данные готовили

но, в любом случае, это просто растянутый во времени ответ клиенту.
источник

АД

Алексей Долгов... in Go-go!
Но как я понимаю для sse как и для вебсокетов устанавливается непрерывое соединение, можно обрабатывать обрыв подключения, переподключаться. Это не тоже самое что отправил запрос и ждешь ответ, потому что если соединение  оборвалось, клиент узнает об этом и переподключается. Не знаю как это под капотом реализовано.
источник

DP

Daniel Podolsky in Go-go!
для обычного соединения тоже можнообрабатывать обрыв
источник

ВС

Владимир Столяров... in Go-go!
Алексей Долгов
Но как я понимаю для sse как и для вебсокетов устанавливается непрерывое соединение, можно обрабатывать обрыв подключения, переподключаться. Это не тоже самое что отправил запрос и ждешь ответ, потому что если соединение  оборвалось, клиент узнает об этом и переподключается. Не знаю как это под капотом реализовано.
sse удобен тем, что в браузере уже есть готовый высокоуровневый клиент, который и переподключение сам делает и события приходящие по топикам в подписчиков отправляет
источник

ЛА

Локоть Анатолий... in Go-go!
Daniel Podolsky
лонг полинг предполагает запрос на каждую новую порцию инфы, а sse позволяет выдавать новые порции по инициативе сервера

вообще-то, так можно было делать и без sse, пропихивая очередной <script>…</script> с неким интервалом. мы так в 2010, кажется, прогрессбар рисовали на клиенте, пока данные готовили

но, в любом случае, это просто растянутый во времени ответ клиенту.
1 длинный ответ экономит траффик.
Экономия есть даже между одним длинным ответом http1 и http2.
Если же сделать повторяющиеся запросы, то траффика это будет жрать очень много, оверхед на переустановку соединения, особенно есть ssl. Да, будет какой-то keep-alive, но не вечный, переконнекты будут
источник

ЛА

Локоть Анатолий... in Go-go!
Daniel Podolsky
Так себе аналог :)
Насколько я знаю, мобильные пуши и работают так, что телефон держит постоянный коннект с сервисом и ждёт данных оттуда.
источник

ВС

Владимир Столяров... in Go-go!
да, но делают его тоже "кто как", в мозилле json-over-ws, в гугле protobuf(+еще что-то)-over-tcp
источник

ЕО

Евгений Омельченко... in Go-go!
Daniel Podolsky
лонг полинг предполагает запрос на каждую новую порцию инфы, а sse позволяет выдавать новые порции по инициативе сервера

вообще-то, так можно было делать и без sse, пропихивая очередной <script>…</script> с неким интервалом. мы так в 2010, кажется, прогрессбар рисовали на клиенте, пока данные готовили

но, в любом случае, это просто растянутый во времени ответ клиенту.
Есть вебсокет в 2020
источник

ЛА

Локоть Анатолий... in Go-go!
Владимир Столяров
Звучит как баг
Перепроверил сейчас, с http.Request.Context().Done() все ок сейчас. Возможно, сбился прицел в прошлый раз
источник

DP

Daniel Podolsky in Go-go!
Локоть Анатолий
Насколько я знаю, мобильные пуши и работают так, что телефон держит постоянный коннект с сервисом и ждёт данных оттуда.
там еще есть очередь на стороне сервиса, и коннект один на все пуши, и принимает их ось, а не конкретное приложение
источник

DM

Dmitry M in Go-go!
Локоть Анатолий
Насколько я знаю, мобильные пуши и работают так, что телефон держит постоянный коннект с сервисом и ждёт данных оттуда.
это дорого в плане батареи
источник

ЛА

Локоть Анатолий... in Go-go!
Daniel Podolsky
там еще есть очередь на стороне сервиса, и коннект один на все пуши, и принимает их ось, а не конкретное приложение
Так ведь в sse заложена очередь через id и last sent id. Можно понять какие ивенты надо дослать клиенту при его переподключении. Причем браузер сам запоминает эти айди и передаёт. Не надо писать джаваскрипт.
источник

ЛА

Локоть Анатолий... in Go-go!
Daniel Podolsky
там еще есть очередь на стороне сервиса, и коннект один на все пуши, и принимает их ось, а не конкретное приложение
По поводу что принимает ось - как раз вот для экономии, как я понимаю, этот сервис сделан глобальным уровня ос, иначе каждое приложение бы имело свой Коннект и все это жрало траффик и батарею.

Повторюсь, я говорю все же про реализацию бакенда по стандарту https://www.w3.org/TR/2009/WD-eventsource-20090421/
Это именно браузерный стандарт со своими плюсами и минусами + требованиями к бэку
источник

ЛА

Локоть Анатолий... in Go-go!
Евгений Омельченко
Есть вебсокет в 2020
Здесь кратко и по-русски сравниваются server sent events и websocket
https://learn.javascript.ru/server-sent-events
источник

p

pragus in Go-go!
Локоть Анатолий
1 длинный ответ экономит траффик.
Экономия есть даже между одним длинным ответом http1 и http2.
Если же сделать повторяющиеся запросы, то траффика это будет жрать очень много, оверхед на переустановку соединения, особенно есть ssl. Да, будет какой-то keep-alive, но не вечный, переконнекты будут
>  оверхед на переустановку соединения, особенно есть ssl

это лишь говорит о кривом клиенте/сервере
источник

p

pragus in Go-go!
Dmitry M
это дорого в плане батареи
почему?
источник