Шаблоны проектирования для общего состояния со множеством потоков
Я пишу приложение для интерактивной доски для развлечения, где несколько пользователей могут просматривать одну доску и рисовать на ней. Я использую веб-сокеты (ванильный JS на внешнем интерфейсе, Scala на внутреннем интерфейсе), и сейчас я просто транслирую события мыши от одного пользователя остальным пользователям и отрисовываю изображение на стороне клиента.
Тем не менее, это приводит к переходному общему состоянию, в то время как я хотел бы, чтобы пользователи могли заходить в любое время и видеть сохраненное общее состояние. Я думаю, что для этого, вероятно, потребуется общий код рендеринга на бэкенде и во внешнем интерфейсе, чтобы клиенты отображали события по мере их потоковой передачи, но сервер может отправлять необработанные данные изображения, когда клиенты связываются.
Итак, мой вопрос здесь: какие еще шаблоны проектирования я должен знать для такого проекта? Это проект для развлечения / обучения, так что это открытый вопрос, но я приму ответ, который содержит несколько полезных ссылок для такого типа потока данных.
1 ответ
Итак, мой вопрос здесь: какие еще шаблоны проектирования я должен знать для такого проекта?
Вам не нужно иметь код рендеринга на сервере. Вы можете просто сохранить все накопленные события, которые привели к текущей доске, и отправить их новому клиенту, и позволить новому клиенту визуализировать доску для себя так, как будто они слушали, когда все события произошли изначально.
Если это больше данных, чем практично, вы можете сжать необработанные события. Например, прямому или почти прямолинейному сегменту не нужны все промежуточные позиции мыши, ему просто нужны первая и последняя позиции сегмента.