Совместная работа
WebSocket, SSE, присутствие, чаты, CRDT, Yjs, общие документы, доски, синхронизация и восстановление соединения.
Материалы
- Прикладные веб-проекты: 100 уроков
Семь последовательных серий: чат, Redis, CMS, магазин, бронирование, расширение браузера и карты.
- WebSocket и SSE: чат поддержки «Линия»
16 уроков о комнатах, правах, подтверждениях и восстановлении чата.
- Договор сообщений и учебная идентичность
Описать события, команды и границу учебного входа.
- HTTP-каркас чата поддержки
Раздать страницу и создать локальную сессию через HTTP.
- Переключение HTTP на WebSocket
Проверить Origin и сессию до handleUpgrade.
- Состояния браузерного WebSocket
Связать форму с открытием и закрытием соединения.
- Проверка входящих сообщений
Отделить допустимую команду от произвольного JSON.
- Комнаты обращений
Направить сообщение только участникам выбранной комнаты.
- Права участника обращения
Проверять доступ к комнате на каждой команде.
- Идентификатор команды и подтверждение
Связать отправку с серверным подтверждением принятия.
- Журнал сообщений и история комнаты
Сохранить ограниченный журнал и вернуть его при входе.
- Порядок сообщений и повторная команда
Использовать номер комнаты и окно подавления дублей.
- Переподключение и восстановление истории
Продолжить журнал по эпохе и курсору после разрыва.
- Присутствие и проверка живого соединения
Разделить присутствие пользователя и исправность сокета.
- Уведомления через Server-Sent Events
Передать одностороннее уведомление отдельным HTTP-потоком.
- Медленный клиент и пределы буфера
Ограничить накопление данных и частоту команд.
- Доступный интерфейс переписки
Сделать состояния, журнал и управление понятными с клавиатуры.
- Остановка чата и границы сопровождения
Закрыть потоки и сформулировать контракт учебного сервера.
- Совместный редактор «Черновик» на Yjs
Последовательная серия из 12 уроков с развивающимся локальным проектом и отдельными состояниями исходного кода.
- Документ Yjs и общий текст
Локальный Y.Doc с именованным Y.Text
- Связывание Y.Text с текстовым полем
Изменение только затронутого диапазона и обработка composition
- Транзакции и происхождение изменений
Групповая операция и origin для локального ввода
- Двоичные обновления и слияние
Обмен update между двумя независимыми документами
- Участники и awareness
Эфемерное состояние участников с отдельным жизненным циклом