Browser client stops reconnecting after a single HTTP 503 handshake

オープン
#5,699 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@Utkarshpandey0001 がすでに取り組んでいます。

2026年9月20日 から。

  • #5757 @Utkarshpandey0001 による — オープン

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
72/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
bun, javascript

調査の方向性

スタンドアロンの再現環境から始め、その bun install、browser:install、repro コマンドを実行して、HTTP 503 のハンドシェイク失敗後のブラウザー WebSocket クライアントを観察します。client/connection_open_failed を発行してアイドル状態になるクライアントパスを追跡します。一時的な 503 エラーでは再接続を再開し、永続的な 401 エラーでは再試行しなくなれば完了です。

索引モデルが issue の本文から書いたものです。

説明

Affected: unmodified npm RivetKit 2.3.13 and 2.3.17 (latest checked 2026-09-11), Chromium 153.0.8010.12, Bun 1.4.0.

Standalone reproduction. After cloning:

bun install --frozen-lockfile --ignore-scripts
bun run browser:install
bun run repro

A loopback test gateway uses real browser WebSockets and a minimal Rivet Init frame:

  1. Establish an SDK connection, then terminate its socket.
  2. Return HTTP 503 once on its next handshake; accept all subsequent handshakes.
  3. The original client emits client/connection_open_failed, becomes idle, and makes no further attempts during a five-second observation window.
  4. A fresh SDK client connects to the same endpoint and actor key while the original remains idle.

Expected: The original connection resumes reconnecting after transient gateway unavailability.

Actual: Recovery stops after the failed handshake. Healthy reconnect succeeds; a persistent HTTP 401 control also becomes idle after one attempt. All six cases are asserted across both versions; exit 0 confirms reproduction.

Browsers expose both 503 and 401 handshake failures as close code 1006, so indiscriminate retries can also retry permanent authentication failures.

主要言語
Rust
スター
6.5k
フォーク
291
平均マージ
18時間 45分
マージ済み PR(30日)
38

環境構築

  • Dockerfile・Docker Compose ファイルなし
  • プルリクエストのテンプレートあり
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

rivet-dev/rivet のほかの issue

rivet-dev/rivet の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。