9. Subscriptions (WebSocket)
Подписки в tRPC позволяют реализовать real-time функциональность через WebSocket. В отличие от query и mutation, подписки поддерживают длительные соединения, по которым сервер может отправлять данные клиенту в режиме реального времени.
Как работают подписки?
Заголовок раздела «Как работают подписки?»Подписки основаны на концепции Observable — потока событий. Сервер создаёт observable, который эмитирует события. Клиент подписывается на него и получает каждое событие по мере его появления. Соединение остаётся открытым до явной отписки.
Настройка WebSocket
Заголовок раздела «Настройка WebSocket»Для использования подписок необходимо настроить WebSocket-сервер на бэкенде (через createWSServer) и добавить wsLink или splitLink на клиенте. splitLink позволяет использовать HTTP для query/mutation и WebSocket только для подписок.
Создание подписки на сервере
Заголовок раздела «Создание подписки на сервере»Подписка создаётся через .subscription() вместо .query() или .mutation(). Обработчик должен возвращать observable, создаваемый через observable<TData, TError>(). Внутри observable вы вызываете emit.next(data) для отправки данных и emit.complete() для завершения.
Использование на клиенте
Заголовок раздела «Использование на клиенте»На клиенте подписка используется через trpc.procedureName.useSubscription(). Хук принимает колбэки onData и onError. Подписка автоматически отключается при размонтировании компонента.
Практические применения
Заголовок раздела «Практические применения»Подписки идеальны для: чат-сообщений в реальном времени, live-уведомлений, обновления статуса задач, live-метрик и дашбордов, совместного редактирования документов.