Open1

【Server Tips📝/非同期処理Tips📝】Server側のTimeout設定について📝

まさぴょん🐱まさぴょん🐱

Server側のTimeout設定について📝

Server側のタイムアウトを無制限にすることは技術的には可能ですが、推奨できません。

推奨できない理由

1. リソースリーク

  • 処理が無限に続く可能性
  • メモリ・CPU・ネットワーク接続の枯渇

2. ユーザー体験が低い

  • フロントエンドが無限に待機状態
  • ユーザーがアプリケーションを使用不可能

3. システム障害のリスク

  • 他のリクエストへの影響
  • サーバー全体のパフォーマンス低下

4. デバッグの困難さ

  • 問題の特定が困難
  • 監視・運用での問題検知が遅れる

推奨される代替案

1. 段階的なタイムアウト延長

現在の600秒(10分)で様子を見て、必要に応じて段階的に延長:

}, 900000); // 15分
}, 1200000); // 20分

2. 非同期処理への変更

長時間処理を非同期化し、ポーリングで結果を取得:

  // 即座にタスクIDを返す
  const taskId = await startPatentAnalysis(query);
  return { taskId, status: 'processing' };

  // 別途ポーリングエンドポイントで結果を確認
  const result = await checkTaskStatus(taskId);

3. プログレス表示の実装

WebSocketやSSEでリアルタイムに進捗を表示する。

  // 進捗更新の送信
  websocket.send({ progress: 30, message: "特許検索中..." });

4. バッチサイズの調整

一度に処理する特許数を制限する。