Проектирование чата в реальном времени на gRPC
Разберите практический пример: спроектируйте масштабируемую серверную часть чата в реальном времени с двунаправленной потоковой передачей gRPC, распределением сообщений и отслеживанием присутствия.
«Проектирование чата в реальном времени на gRPC» — бесплатный урок gRPC & High Performance APIs на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения gRPC & High Performance APIs, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс gRPC & High Performance APIs содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
The Case Study
We design a chat backend that must deliver messages instantly to thousands of connected users. gRPC bidirectional streaming is a natural fit for this long-lived, two-way flow.
Defining the Service
The core is a bidi stream: clients send messages and receive others' messages over the same call.
service Chat {
rpc Connect(stream ClientEvent) returns (stream ServerEvent);
}Per-Connection Sessions
Each open stream is a user session. The server tracks the stream handle so it can push messages to that specific user later.
The Fan-Out Problem
When one user posts to a room, the server must deliver it to every other member's stream. This fan-out is the heart of chat scaling.
In-Process Hub
A simple design keeps a hub mapping rooms to subscriber channels. Posting iterates members and sends to each.
func (h *Hub) Broadcast(room string, msg *ServerEvent) {
for _, sub := range h.rooms[room] {
sub.outbox <- msg
}
}Scaling Past One Instance
Users on different server instances must still see each other. Introduce a message bus (Redis Pub/Sub, NATS, Kafka) so instances relay messages to one another.
Cross-Instance Flow
An instance publishes new messages to the bus; every instance subscribes and forwards to its own local connections. This decouples delivery from where users connect.
Presence and Typing
Presence (online/offline) and typing indicators are just more event types on the stream. Track last-seen timestamps and broadcast presence changes via the same fan-out path.
Backpressure per Client
A slow client must not stall the hub. Give each session a bounded outbox; if it overflows, drop or disconnect that client instead of blocking everyone.
select {
case sub.outbox <- msg:
default:
disconnect(sub) // slow consumer
}Reconnection and Delivery
Networks drop. Clients reconnect and resume from a last-seen message id. Persist recent history so missed messages can be replayed on reconnect.
Operational Concerns
Production chat needs:
- Keepalive to detect dead connections
- Authentication on connect (token in metadata)
- Metrics on active streams and fan-out latency
- Graceful drain on deploy
Quick Check
Test your chat-design knowledge.
Recap
You designed a real-time chat backend:
- Bidirectional streaming models each user session
- A hub fans out room messages to subscribers
- A message bus relays across multiple instances
- Presence/typing are extra event types; per-client backpressure protects the hub
- Reconnection replays missed messages; ops needs keepalive, auth, metrics, drain
Изучай gRPC & High Performance APIs с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 12
- Уроки
- 48
Часто задаваемые вопросы
Урок «Проектирование чата в реальном времени на gRPC» бесплатный?
Да — полный текст урока «Проектирование чата в реальном времени на gRPC» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс gRPC & High Performance APIs, подпишись на CoddyKit PRO. Курс gRPC & High Performance APIs содержит 4 уроков всего.
Чему я научусь в уроке «Проектирование чата в реальном времени на gRPC»?
Разберите практический пример: спроектируйте масштабируемую серверную часть чата в реальном времени с двунаправленной потоковой передачей gRPC, распределением сообщений и отслеживанием присутствия. Ты практикуешь gRPC & High Performance APIs с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать gRPC & High Performance APIs?
Предыдущий опыт не требуется. gRPC & High Performance APIs на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Проектирование чата в реальном времени на gRPC»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке gRPC & High Performance APIs?
Да. Каждый урок gRPC & High Performance APIs включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание высокопроизводительных шлюзов
- Расширенные шаблоны отказоустойчивости
- Будущее высокопроизводительных API
- Проектирование чата в реальном времени на gRPC