Я пытаюсь создать приложение ap, такое как Netflix Party, где пользователи могут присоединиться к комнате, чтобы вместе смотреть видео. В своей голове я до некоторой степени использовал веб-сокеты в качестве основного способа связи между сервером и клиентами, и мне нужно знать, иду ли я в правильном направлении.
Требования:
- В комнате может быть mov ie, к которому люди могут присоединиться и смотреть вместе
- Все в комнате могут воспроизводить / приостанавливать видео
- Каждый действие зрителя должно быть синхронизировано с другими зрителями, например, если кто-то приостанавливает видео, видео всех остальных должно быть приостановлено
- Каждый раз, когда новый зритель присоединяется к комнате, он / она должны начать смотреть видео именно там, где mov ie находится в данный момент (воспроизведение или пауза и время)
Мои идеи на данный момент:
- Создание объекта Room для каждой созданной комнаты
- Сущность комнаты будет иметь что-то вроде закладки и статус mov ie (ВОСПРОИЗВЕДЕНИЕ / ПАУЗА / ЗАВЕРШЕНО)
- Любой, кто присоединяется к комнате, будет запрашивать у Сервера закладку и статус t he mov ie.
Теперь, чтобы мой сервер имел самую последнюю информацию о воспроизводимом видео, мне нужен способ информировать его через определенные промежутки времени.
Если мое мнение пока верно, мне нужны в основном две вещи:
- Способ информирования моего сервера о закладке (последней просмотренной), чтобы всякий раз, когда кто-то подключается, зрителю предоставляется самое последнее состояние из mov ie.
- Способ для сервера синхронизировать c любое действие, выполняемое зрителем, со всеми другими зрителями
Для 1, я думаю, что каждый клиент должен отправлять обновления о том, где они находятся в mov ie с определенным интервалом, но я не знаю, как сервер будет обрабатывать 100 запросов в секунду для одной комнаты и, что наиболее важно, будет ли это масштабируемое решение.
- Должны ли все клиенты отправлять свои обновления или один из клиентов должен быть обязан обновлять сервер о том, где он находится в mov ie?
- Если последнее, то как мы согласовать задержку между тем, кто отправляет обновление, и другим зрителем, который может отключиться на секунду или две?
- Самое главное, как мне вставить все эти обновления в БД, поддерживая согласованность?
Для 2, я думаю, клиент отправит событие на сервер, затем сервер обновит базу данных и затем передаст событие всем другим клиентам. Но тогда
- Что происходит, когда Viewer 1 отправляет сигнал на паузу, где
t
является моментом времени в mov ie, а Viewer 2 находится в t-2
? Должен ли Viewer 2 перейти к t
и установить себя там, или он должен приостановить себя, где бы он ни находился?
Нужна ли мне для этого база данных с большим объемом записи? Следует ли мне использовать передачу сообщений для обновления базы данных об изменениях в закладках и статусе mov ie?
Это первый раз, когда я создаю полное приложение, подобное этому, поэтому, пожалуйста, простите меня за то, что я не знал больше всего очевидные вещи. Мы будем очень благодарны за любую помощь, чтобы указать правильное направление.
Спасибо за ваше время.