Перейти к содержимому

9. Subscriptions (WebSocket)

Подписки в tRPC позволяют реализовать real-time функциональность через WebSocket. В отличие от query и mutation, подписки поддерживают длительные соединения, по которым сервер может отправлять данные клиенту в режиме реального времени.

Подписки основаны на концепции Observable — потока событий. Сервер создаёт observable, который эмитирует события. Клиент подписывается на него и получает каждое событие по мере его появления. Соединение остаётся открытым до явной отписки.

Для использования подписок необходимо настроить 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-метрик и дашбордов, совместного редактирования документов.