|
|
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
такая тема, мопед не мой, не надо критиковать решение )) можно просто сказать что так не делается. но... в общем задача. есть некий вебсервис. есть некий фронтовый клиент. по ресту клиент дергает сервера и достает какие-то объекты или наборы объектов по краду. тут всё просто и обыденно. теперь есть задача сделать клиент чуть более интерактивным. т.е. когда какие-то таблицы обновляются, клиент хочет это знать и обновлять эти сведения уже у себя. опять же через рест дергая обновенные объекты. как это сделать? надо как то сказать фронту что надо передёрнуть гет что-нибудь там сущность. как сказать фронту что надо дергать? выбрано решение - сигнализировать по вебсокету. что такая то сущность обновлена. сказано-сделано -- обновились сведения шлем по вебсокету всем клиентам что они обновились, а клиенты решают - передергивать им по ресту дату или нет. и всё бы ничего, но возникает ряд вопросов - насколько данный подход верен? может лучше по вебсокету вообще тогда уж ВСЁ отдавать? или отдавать только обновленные поля? (но тут много эвристики). или вообще всё не так? в описанном виде выше оно работает. тут две проблемы - по-хорошему надо сделать механизм чтоб бэк всегда слал что-то фронту когда обновляется любой набор данных. это проблема один. как ее решить - тут в принципе всё ясно. и тут выходит другая проблема - допустим у меня сотня юзеров сидит с сотней клиентов. и тут у меня случайно так обновилось что-то циклически 100 раз (ну скажем, десять сущностей по 10 раз), далее у меня на фронт сотне юзеров улетает каждому по 100 сокетмесаджей.. или 10 000 меседжей выплёвывает краткосрочно мой бэк. и если гипотетически у ста юзеров открыты окошки показывающие те самые сущности назад на бэк возвращается запросы в количестве от 100 и до 10 000 единовременно. бэк сам себя убил. можно конечно же подумать о микрооптимизациях, одна проблема минимизируется тем что скажем, наверняка у всех все сущности ожидаться к показу не будут. и вторая как то трекать на бэке на слое отсылки сокетсообщений на предмет какие юзеры какие сокетсообщения ожидают (типа у меня открыто окно А и поэтому мне не надо получать сокетмеседж об обновлении таблицы Б). но это выглядит как-то черезчур уж сложно, хоть и интересно )) и мне кажется тут должен быть какой то простой вариант. люди же как то пишут интерактивные приложения? или там вообще весь обмен идет по сокетам, а-ля графкьюэль, без всяких этих ваших старомодных рестов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 01:44 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
andreykaTтакая тема, мопед не мой, не надо критиковать решение )) можно просто сказать что так не делается. но... в общем задача. есть некий вебсервис. есть некий фронтовый клиент. по ресту клиент дергает сервера и достает какие-то объекты или наборы объектов по краду. тут всё просто и обыденно. теперь есть задача сделать клиент чуть более интерактивным. т.е. когда какие-то таблицы обновляются, клиент хочет это знать и обновлять эти сведения уже у себя. опять же через рест дергая обновенные объекты. как это сделать? надо как то сказать фронту что надо передёрнуть гет что-нибудь там сущность. как сказать фронту что надо дергать? выбрано решение - сигнализировать по вебсокету. что такая то сущность обновлена. сказано-сделано -- обновились сведения шлем по вебсокету всем клиентам что они обновились, а клиенты решают - передергивать им по ресту дату или нет. и всё бы ничего, но возникает ряд вопросов - насколько данный подход верен? может лучше по вебсокету вообще тогда уж ВСЁ отдавать? или отдавать только обновленные поля? (но тут много эвристики). или вообще всё не так? в описанном виде выше оно работает. тут две проблемы - по-хорошему надо сделать механизм чтоб бэк всегда слал что-то фронту когда обновляется любой набор данных. это проблема один. как ее решить - тут в принципе всё ясно. и тут выходит другая проблема - допустим у меня сотня юзеров сидит с сотней клиентов. и тут у меня случайно так обновилось что-то циклически 100 раз (ну скажем, десять сущностей по 10 раз), далее у меня на фронт сотне юзеров улетает каждому по 100 сокетмесаджей.. или 10 000 меседжей выплёвывает краткосрочно мой бэк. и если гипотетически у ста юзеров открыты окошки показывающие те самые сущности назад на бэк возвращается запросы в количестве от 100 и до 10 000 единовременно. бэк сам себя убил. можно конечно же подумать о микрооптимизациях, одна проблема минимизируется тем что скажем, наверняка у всех все сущности ожидаться к показу не будут. и вторая как то трекать на бэке на слое отсылки сокетсообщений на предмет какие юзеры какие сокетсообщения ожидают (типа у меня открыто окно А и поэтому мне не надо получать сокетмеседж об обновлении таблицы Б). но это выглядит как-то черезчур уж сложно, хоть и интересно )) и мне кажется тут должен быть какой то простой вариант. люди же как то пишут интерактивные приложения? или там вообще весь обмен идет по сокетам, а-ля графкьюэль, без всяких этих ваших старомодных рестов? если у тебя реализованы websocket то правильнее сразу по ним и передавать изменения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 08:55 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
andreykaT, Rest это нет длинного соединения и тебя не помнят. WS это всё наоборот. Как это вы объедините? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 09:52 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
andreykaTдопустим у меня сотня юзеров сидит с сотней клиентов. и У клиента таймер и галка: Получать обновления раз в n минут или сек. Ни разу на компе своём не видел галки? Жжёшь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 09:58 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
Какой галки? Речь о вебприложении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 10:15 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
andreykaTКакой галки? Речь о вебприложении Счас грань веб и не веб стирается. Ты её сам стираешь вводя сообщения от сайта клиенту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 12:42 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
ну задача то тривиальна. в мире миллиарды сервисов на ресте. и в принципе, ничего особого нет в желании сделать интерактивное обновление. или там механизмы иные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 12:47 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
вариант отказываться от реста - к сожалению, вообще не вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 12:55 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
andreykaT, Да, вполне нормальное решение. Нотификации по WS, отдача по REST. Остальные оптимизации уже зависят от предметной области. Либо кэш воткнуть. Либо очередь с задержкой, чтобы массовые обновления не вызывали кучу нотификаций и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 13:00 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
andreykaTвариант отказываться от реста - к сожалению, вообще не вариант. Значит ws или таймер только для обратного сообщения-флажка. Так? После флажка самому забирать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 14:01 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
andreykaTмиллиарды сервисов на ресте. и в пр Дак они лезут сами в клиент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 14:03 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
не совсем понял что вы имеете ввиду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 20:17 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
andreykaTне совсем понял что вы имеете ввиду. Я имел ввиду, что миллиарды сервисов, они обычные и не такие как ты захотел. Зачем ты их упомянул я не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 20:44 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
andreykaT, зачем дергать по рест, когда можно сразу передать по websocket? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 21:50 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
ты предлагаешь переписать всё приложение с реста на вебсокет и графQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 22:55 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
Petro123andreykaTне совсем понял что вы имеете ввиду. Я имел ввиду, что миллиарды сервисов, они обычные и не такие как ты захотел. Зачем ты их упомянул я не понял. сорри может не так выразился. имею ввиду что есть много сервисов с динамическим обновлением данных на вьюшках. вот и задался вопросом как это реализовано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 22:56 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
вадя, или ты предлагаешь кусочек передать по ресту, следом мне в приложении выстроить параллельный слой, куда клиент будет регаться по вебсокету говоря что он по ресту дернул какой-нибудь ресурс и типа "подписывается" на слушание этого ресурса и кусочки обновлений мне слать ему по вебсокету а клиент потом эти кусочки будет собирать в одно целое и показывать юзеру? нееее. спсииибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 23:04 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
andreykaTможет не так выразился. имею ввиду что есть много сервисов с динамическим обновлением данных на вьюшках. Я не врубаюсь. Если их много, дак и приводи пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2017, 00:38 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
andreykaTвадя, или ты предлагаешь кусочек передать по ресту, следом мне в приложении выстроить параллельный слой, куда клиент будет регаться по вебсокету говоря что он по ресту дернул какой-нибудь ресурс и типа "подписывается" на слушание этого ресурса и кусочки обновлений мне слать ему по вебсокету а клиент потом эти кусочки будет собирать в одно целое и показывать юзеру? нееее. спсииибо. ну где-то так, только как ни крути у тебя получится так. потому что это будет самое простое, хотя это и грозит переписыванием кода... а какие проблемы проблемы на клиенте собрать и вставить? и что за клиент? браузер? тогда всё просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2017, 09:07 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
andreykaT, самое трудное ты уже сделал - внедрил websocket. остальное уже намного проще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2017, 09:09 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
вадячто это будет самое простое, хотя это и грозит переписыванием кода.. вадя, учись компромиссам)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2017, 13:07 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
Petro123вадячто это будет самое простое, хотя это и грозит переписыванием кода.. вадя, учись компромиссам)) я не против компромиссов, просто мне кажется, что тс придет к ws, но мне интересно к чему тс придет на самом деле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2017, 13:58 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
вадяя не против компромиссов, просто мне кажется, что тс придет к ws )) "я не против компромиссов, но он придёт всё равно к моему варианту" (с - вадя) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2017, 14:18 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
Petro123andreykaTможет не так выразился. имею ввиду что есть много сервисов с динамическим обновлением данных на вьюшках. Я не врубаюсь. Если их много, дак и приводи пример. например, есть много форумных движков где ты когда сидишь на форуме там ответы онлайн появляются снизу прирастают )) но там я не разгребал как они это в деталях сделали. я гооврил с нашим фронтовиком он говорит могу получить сигнал от бэка что есть обновы, в бэкграунде браузера по ресту дернуть ресурс, а потом отрисовать дэльту. еще я видел такое в сервисах онлайн бронирований, когда на лету у тебя в таблицах данные менялись. это о не корпоративных системах речь. зы. да. клиент - это браузер. зы2. да, система она не совсем кровавый энтерпрайз, но достаточно навороченный кейс-менеджмент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2017, 17:59 |
|
||
|
websockets + rest
|
|||
|---|---|---|---|
|
#18+
вадяandreykaT, самое трудное ты уже сделал - внедрил websocket. остальное у же намного проще нет, это самое простое. то, что ты говоришь - это по-сути отказываться от рест контроллеров и переходить на транспорт по вебсокету со всеми вытекающими. я с тобой согласен, что это бы решило задачу радикально. но это не вариант и никто мне не позволит это делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2017, 18:01 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39532842&tid=2122552]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
80ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 415ms |

| 0 / 0 |
