2

同じアドレスの 2 つの独立した HttpListener インスタンスをシームレスに切り替えようとしています。現在、インスタンス 1 を停止してインスタンス 2 を開始した後、数秒のダウンタイム (ユーザーが 404 を取得する場所) があります (また、明らかに、インスタンス 1 が閉じる前にインスタンス 2 が開始された場合、従来の "既に http に登録されています" が表示されます)。 .sys" エラー)。

同じアドレスで (ダウンタイムなしで) シームレスに切り替える方法についてのアイデアはありますか?

4

1 に答える 1

1

ここでの古典的な答えは、HAProxyなどの外部ロードバランサーであり、複数のマシン、プロセス、ポート、ホストなどに負荷を分散します。たとえば、1台のマシンでも、異なるポートに2つのインスタンスを配置し(クライアントが接続していると見なすものとは関係ありません)、HAProxyを介してそれらに負荷を切り替えることができます。これにより、すべてのポート/ホストの再マッピングが自動的に処理されます。

単一のプロセス(サービスなど)が必要な場合、ここでの秘訣はAppDomainを使用することです。

  • 私たちがhttpを処理するだけのシェルであるサービスですが、...を介してリクエストを処理します。
  • ...子AppDomain内の実際のオブジェクトへのプロキシであるMarshalByRefObject..。
  • ...アップグレードが必要なときはいつでもオンザフライで作成でき、新しいドメインの準備ができたらプロキシインスタンスを交換するだけです...
  • ...次に、廃止されたAppDomainをアンロードします

少し面倒ですが(実行するアプリのバージョンごとに一時的な場所を作成することなどを心配する必要があります)、非常に効果的です。

于 2012-05-21T18:51:59.677 に答える