Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 websockets + rest  [new]
andreykaT
Member

Откуда:
Сообщений: 762
такая тема, мопед не мой, не надо критиковать решение )) можно просто сказать что так не делается. но... в общем задача.
есть некий вебсервис. есть некий фронтовый клиент. по ресту клиент дергает сервера и достает какие-то объекты или наборы объектов по краду. тут всё просто и обыденно.

теперь есть задача сделать клиент чуть более интерактивным. т.е. когда какие-то таблицы обновляются, клиент хочет это знать и обновлять эти сведения уже у себя. опять же через рест дергая обновенные объекты.

как это сделать? надо как то сказать фронту что надо передёрнуть гет что-нибудь там сущность.
как сказать фронту что надо дергать? выбрано решение - сигнализировать по вебсокету. что такая то сущность обновлена.
сказано-сделано -- обновились сведения шлем по вебсокету всем клиентам что они обновились, а клиенты решают - передергивать им по ресту дату или нет.

и всё бы ничего, но возникает ряд вопросов - насколько данный подход верен? может лучше по вебсокету вообще тогда уж ВСЁ отдавать? или отдавать только обновленные поля? (но тут много эвристики). или вообще всё не так?

в описанном виде выше оно работает. тут две проблемы - по-хорошему надо сделать механизм чтоб бэк всегда слал что-то фронту когда обновляется любой набор данных. это проблема один. как ее решить - тут в принципе всё ясно. и тут выходит другая проблема - допустим у меня сотня юзеров сидит с сотней клиентов. и тут у меня случайно так обновилось что-то циклически 100 раз (ну скажем, десять сущностей по 10 раз), далее у меня на фронт сотне юзеров улетает каждому по 100 сокетмесаджей.. или 10 000 меседжей выплёвывает краткосрочно мой бэк.
и если гипотетически у ста юзеров открыты окошки показывающие те самые сущности назад на бэк возвращается запросы в количестве от 100 и до 10 000 единовременно.
бэк сам себя убил.

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

и вторая как то трекать на бэке на слое отсылки сокетсообщений на предмет какие юзеры какие сокетсообщения ожидают (типа у меня открыто окно А и поэтому мне не надо получать сокетмеседж об обновлении таблицы Б). но это выглядит как-то черезчур уж сложно, хоть и интересно )) и мне кажется тут должен быть какой то простой вариант. люди же как то пишут интерактивные приложения? или там вообще весь обмен идет по сокетам, а-ля графкьюэль, без всяких этих ваших старомодных рестов?
7 окт 17, 01:44    [20850225]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 12726
andreykaT
такая тема, мопед не мой, не надо критиковать решение )) можно просто сказать что так не делается. но... в общем задача.
есть некий вебсервис. есть некий фронтовый клиент. по ресту клиент дергает сервера и достает какие-то объекты или наборы объектов по краду. тут всё просто и обыденно.

теперь есть задача сделать клиент чуть более интерактивным. т.е. когда какие-то таблицы обновляются, клиент хочет это знать и обновлять эти сведения уже у себя. опять же через рест дергая обновенные объекты.

как это сделать? надо как то сказать фронту что надо передёрнуть гет что-нибудь там сущность.
как сказать фронту что надо дергать? выбрано решение - сигнализировать по вебсокету. что такая то сущность обновлена.
сказано-сделано -- обновились сведения шлем по вебсокету всем клиентам что они обновились, а клиенты решают - передергивать им по ресту дату или нет.

и всё бы ничего, но возникает ряд вопросов - насколько данный подход верен? может лучше по вебсокету вообще тогда уж ВСЁ отдавать? или отдавать только обновленные поля? (но тут много эвристики). или вообще всё не так?

в описанном виде выше оно работает. тут две проблемы - по-хорошему надо сделать механизм чтоб бэк всегда слал что-то фронту когда обновляется любой набор данных. это проблема один. как ее решить - тут в принципе всё ясно. и тут выходит другая проблема - допустим у меня сотня юзеров сидит с сотней клиентов. и тут у меня случайно так обновилось что-то циклически 100 раз (ну скажем, десять сущностей по 10 раз), далее у меня на фронт сотне юзеров улетает каждому по 100 сокетмесаджей.. или 10 000 меседжей выплёвывает краткосрочно мой бэк.
и если гипотетически у ста юзеров открыты окошки показывающие те самые сущности назад на бэк возвращается запросы в количестве от 100 и до 10 000 единовременно.
бэк сам себя убил.

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

и вторая как то трекать на бэке на слое отсылки сокетсообщений на предмет какие юзеры какие сокетсообщения ожидают (типа у меня открыто окно А и поэтому мне не надо получать сокетмеседж об обновлении таблицы Б). но это выглядит как-то черезчур уж сложно, хоть и интересно )) и мне кажется тут должен быть какой то простой вариант. люди же как то пишут интерактивные приложения? или там вообще весь обмен идет по сокетам, а-ля графкьюэль, без всяких этих ваших старомодных рестов?

если у тебя реализованы websocket то правильнее сразу по ним и передавать изменения.
7 окт 17, 08:55    [20850337]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 29731
andreykaT,
Rest это нет длинного соединения и тебя не помнят.
WS это всё наоборот.
Как это вы объедините?
7 окт 17, 09:52    [20850367]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 29731
andreykaT
допустим у меня сотня юзеров сидит с сотней клиентов. и

У клиента таймер и галка: Получать обновления раз в n минут или сек.
Ни разу на компе своём не видел галки? Жжёшь.
7 окт 17, 09:58    [20850377]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
andreykaT
Member

Откуда:
Сообщений: 762
Какой галки? Речь о вебприложении
7 окт 17, 10:15    [20850412]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 29731
andreykaT
Какой галки? Речь о вебприложении

Счас грань веб и не веб стирается.
Ты её сам стираешь вводя сообщения от сайта клиенту.
7 окт 17, 12:42    [20850668]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
andreykaT
Member

Откуда:
Сообщений: 762
ну задача то тривиальна. в мире миллиарды сервисов на ресте. и в принципе, ничего особого нет в желании сделать интерактивное обновление. или там механизмы иные?
7 окт 17, 12:47    [20850676]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
andreykaT
Member

Откуда:
Сообщений: 762
вариант отказываться от реста - к сожалению, вообще не вариант.
7 окт 17, 12:55    [20850689]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
Blazkowicz
Member

Откуда:
Сообщений: 23575
andreykaT,

Да, вполне нормальное решение. Нотификации по WS, отдача по REST. Остальные оптимизации уже зависят от предметной области. Либо кэш воткнуть. Либо очередь с задержкой, чтобы массовые обновления не вызывали кучу нотификаций и т.п.
7 окт 17, 13:00    [20850695]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 29731
andreykaT
вариант отказываться от реста - к сожалению, вообще не вариант.

Значит ws или таймер только для обратного сообщения-флажка. Так?
После флажка самому забирать.
7 окт 17, 14:01    [20850769]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 29731
andreykaT
миллиарды сервисов на ресте. и в пр

Дак они лезут сами в клиент?
7 окт 17, 14:03    [20850771]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
andreykaT
Member

Откуда:
Сообщений: 762
не совсем понял что вы имеете ввиду.
7 окт 17, 20:17    [20851267]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 29731
andreykaT
не совсем понял что вы имеете ввиду.

Я имел ввиду, что миллиарды сервисов, они обычные и не такие как ты захотел. Зачем ты их упомянул я не понял.
7 окт 17, 20:44    [20851312]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 12726
andreykaT,
зачем дергать по рест, когда можно сразу передать по websocket?
7 окт 17, 21:50    [20851405]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
andreykaT
Member

Откуда:
Сообщений: 762
ты предлагаешь переписать всё приложение с реста на вебсокет и графQL?
7 окт 17, 22:55    [20851475]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
andreykaT
Member

Откуда:
Сообщений: 762
Petro123
andreykaT
не совсем понял что вы имеете ввиду.

Я имел ввиду, что миллиарды сервисов, они обычные и не такие как ты захотел. Зачем ты их упомянул я не понял.

сорри может не так выразился. имею ввиду что есть много сервисов с динамическим обновлением данных на вьюшках. вот и задался вопросом как это реализовано
7 окт 17, 22:56    [20851477]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
andreykaT
Member

Откуда:
Сообщений: 762
вадя, или ты предлагаешь кусочек передать по ресту, следом мне в приложении выстроить параллельный слой, куда клиент будет регаться по вебсокету говоря что он по ресту дернул какой-нибудь ресурс и типа "подписывается" на слушание этого ресурса и кусочки обновлений мне слать ему по вебсокету а клиент потом эти кусочки будет собирать в одно целое и показывать юзеру?

нееее. спсииибо.
7 окт 17, 23:04    [20851487]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 29731
andreykaT
может не так выразился. имею ввиду что есть много сервисов с динамическим обновлением данных на вьюшках.

Я не врубаюсь. Если их много, дак и приводи пример.
8 окт 17, 00:38    [20851630]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 12726
andreykaT
вадя, или ты предлагаешь кусочек передать по ресту, следом мне в приложении выстроить параллельный слой, куда клиент будет регаться по вебсокету говоря что он по ресту дернул какой-нибудь ресурс и типа "подписывается" на слушание этого ресурса и кусочки обновлений мне слать ему по вебсокету а клиент потом эти кусочки будет собирать в одно целое и показывать юзеру?

нееее. спсииибо.

ну где-то так, только как ни крути у тебя получится так. потому что это будет самое простое, хотя это и грозит переписыванием кода...
а какие проблемы проблемы на клиенте собрать и вставить? и что за клиент? браузер? тогда всё просто.
8 окт 17, 09:07    [20851759]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 12726
andreykaT,
самое трудное ты уже сделал - внедрил websocket. остальное уже намного проще
8 окт 17, 09:09    [20851764]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 29731
вадя
что это будет самое простое, хотя это и грозит переписыванием кода..

вадя,
учись компромиссам))
8 окт 17, 13:07    [20852056]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 12726
Petro123
вадя
что это будет самое простое, хотя это и грозит переписыванием кода..

вадя,
учись компромиссам))

я не против компромиссов, просто мне кажется, что тс придет к ws, но мне интересно к чему тс придет на самом деле.
8 окт 17, 13:58    [20852101]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 29731
вадя
я не против компромиссов, просто мне кажется, что тс придет к ws

))
"я не против компромиссов, но он придёт всё равно к моему варианту" (с - вадя)
8 окт 17, 14:18    [20852118]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
andreykaT
Member

Откуда:
Сообщений: 762
Petro123
andreykaT
может не так выразился. имею ввиду что есть много сервисов с динамическим обновлением данных на вьюшках.

Я не врубаюсь. Если их много, дак и приводи пример.

например, есть много форумных движков где ты когда сидишь на форуме там ответы онлайн появляются снизу прирастают )) но там я не разгребал как они это в деталях сделали. я гооврил с нашим фронтовиком он говорит могу получить сигнал от бэка что есть обновы, в бэкграунде браузера по ресту дернуть ресурс, а потом отрисовать дэльту.
еще я видел такое в сервисах онлайн бронирований, когда на лету у тебя в таблицах данные менялись. это о не корпоративных системах речь.

зы. да. клиент - это браузер.
зы2. да, система она не совсем кровавый энтерпрайз, но достаточно навороченный кейс-менеджмент.
8 окт 17, 17:59    [20852495]     Ответить | Цитировать Сообщить модератору
 Re: websockets + rest  [new]
andreykaT
Member

Откуда:
Сообщений: 762
вадя
andreykaT,
самое трудное ты уже сделал - внедрил websocket. остальное у
же намного проще


нет, это самое простое. то, что ты говоришь - это по-сути отказываться от рест контроллеров и переходить на транспорт по вебсокету со всеми вытекающими. я с тобой согласен, что это бы решило задачу радикально. но это не вариант и никто мне не позволит это делать.
8 окт 17, 18:01    [20852500]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить