0Pricing
gRPC & High Performance APIs · レッスン

gRPCによるリアルタイムチャットバックエンドの設計

gRPCの双方向ストリーミング、ファンアウト、プレゼンスを使ってスケーラブルなリアルタイムチャットバックエンドを設計する、実際の事例を見ていきます。

「gRPCによるリアルタイムチャットバックエンドの設計」はCoddyKit上の無料gRPC & High Performance APIsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これは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によるリアルタイムチャットバックエンドの設計」レッスンは無料ですか?

はい。「gRPCによるリアルタイムチャットバックエンドの設計」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、gRPC & High Performance APIsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 gRPC & High Performance APIsコースには全4レッスンが含まれています。

「gRPCによるリアルタイムチャットバックエンドの設計」で何を学びますか?

gRPCの双方向ストリーミング、ファンアウト、プレゼンスを使ってスケーラブルなリアルタイムチャットバックエンドを設計する、実際の事例を見ていきます。 ブラウザで直接実行するハンズオンコードでgRPC & High Performance APIsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

gRPC & High Performance APIsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのgRPC & High Performance APIsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「gRPCによるリアルタイムチャットバックエンドの設計」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このgRPC & High Performance APIsレッスンでコードを書いて実行できますか?

はい。すべてのgRPC & High Performance APIsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 高スループットゲートウェイの構築
  2. 高度なレジリエンスパターン
  3. 高性能APIの未来
  4. gRPCによるリアルタイムチャットバックエンドの設計
← gRPC & High Performance APIsに戻る