Я создал приложение Instant Messenger полностью на @Cloudflare. Это заняло 1 день, 3 файла, 4 ресурса... и оно готово к масштабированию от 0 до миллионов. Worker → аутентификация и маршрутизация База данных D1 → хранение пользователя/пароля User DO → профиль пользователя и друзья Conversation DO → сообщения Блог в ответ, но краткий тизер здесь: Библиотека cloudflare/actors сделала большую часть этого легкой благодаря свойствам сохранения, простому управлению веб-сокетами и отправке сообщений всем слушателям. Но что делала каждая часть? Аутентификация и маршрутизация (Worker + D1) Все запросы проходят через Worker, аутентифицированные или нет. Если не аутентифицирован, доступные действия — войти или зарегистрироваться. Когда аутентифицирован, он может передать запрос в один из наших Durable Objects (пользователь или разговор), чтобы установить соединение по веб-сокету. Вся информация об аутентификации пользователей хранится в базе данных D1 (в этом примере все было на CF). Служба пользователей (Durable Object) Наш вид списка друзей напрямую подключается к нашему Durable Object пользователя через веб-сокет. Когда мы обновляем наш статус, мы отправляем сообщение в наш индивидуальный DO, который затем может транслировать через RPC в DO наших друзей и определить, онлайн ли они, чтобы отправить им сообщение по веб-сокету для живого обновления. Здесь мы также храним наш список друзей в базе данных SQLite, ограниченной нашим пользователем. Служба разговоров (Durable Object) Каждый отдельный разговор между двумя пользователями получает свой собственный экземпляр DO. Его единственная ответственность — хранить сообщения, отправлять уведомления (через сокеты), когда отправляются новые сообщения, и отправлять уведомление, когда пользователь начинает печатать, чтобы мы могли видеть "Человек печатает..." Кратко; Создание приложений для удовольствия ради воспоминаний о детстве — это... стоит того.