3

複数の AJAX リクエストを同時に行うページがあります。コメット モデルを使用しているため、常に複数の HTTP 接続が開いており、サーバーからの追加データを待機しています。将来、ページがより複雑になるにつれて、さらに多くのページが存在する可能性があります。接続を開きすぎるのが心配です。

それらを「多重化」する方法があるのだろうか。すべての要求が送信される単一の接続を持ち、メッセージをサーバー側とクライアント側の両方の適切なハンドラー関数にルーティングします。

これまでのところ、これを行う方法がわかりません.HTTPリクエストを作成してデータの待機を開始すると、それ以上のリクエストデータを送信することはできないと思います. 別の接続を開いてさらにデータを送信する前に、その接続を閉じることができますが、そのときにサーバーが応答を送信した場合はどうなるでしょうか?

私はしてはいけないことをしようとしていますか?

4

3 に答える 3

1

複数の接続を開くことは不可能だと思うのはなぜですか? 試しましたか?

私たちが使用したアプローチは、概念的に 2 つの接続を使用することでした。1 つは Comet 用で、すべての非同期配信はその上で多重化されていたため、さまざまな種類のメッセージがそこに到着しました。要求/応答は他方で行われた 事実上、Comet を追加して、従来の Ajax アプリを作成しただけです。

于 2009-09-07T06:59:07.833 に答える
0

結局、 djnaが説明したことを実行しました(少なくとも同じことだと思います):応答をリッスンし続けるCometスタイルの接続を常に1つ開いていますが、通常どおり、新しい接続を使用してAJAXリクエストを送信します。各リクエストは「ジョブ ID」とともにすぐに返され (そのため、接続は非常に短命です)、その「ジョブ」のそれ以降のデータは Comet 接続を介して送信されます。このようにして、2 つの AJAX リクエストが同時に発生しない限り、常に最大 2 つの接続が存在しますが、これは私の場合はほとんどありません。

もちろん、一度に複数のクライアントがページを使用している可能性があるため、comet 接続でどのジョブ応答を送信する必要があるかを判断するために、「comet セッション ID」も持っています。この ID は、ページの読み込み時に生成され、ページの存続期間中は変更されません。ジョブを作成する通常の AJAX リクエストの後に、ジョブ ID とセッション ID を使用して別の非常に単純な AJAX リクエストを送信します。これにより、そのジョブがセッションに関連付けられ、そのジョブに対するすべての応答を、そのセッション ID に関連付けられた確立済みの接続に送信するようにサーバーに指示されます。

もちろん、セッション ID を最初のリクエストの一部にすることもできますが、これは、サーバー側の各 AJAX メソッドがそれを知る必要があることを意味し、インフラストラクチャの一部として別々に保持することをお勧めします。 .

于 2009-09-09T00:53:07.847 に答える
0

ブラウザー開発者の合意があります - 同じサブドメインに送信できる同時リクエストは 2 つだけです。そのため、複数の AJAX リクエストが便利ですが、キューに注意してください。一方、セキュリティ上の理由により、JScript の呼び出しは単一のサブドメインに制限されています。この制限を飛び越えるための小さなトリックがあります (たとえば、http://www.simple-talk.com/dotnet/asp.net/calling-cross-domain-web-services-in-ajax/セクション「動的スクリプト タグ」を参照)。ハック")

于 2009-09-07T07:03:32.517 に答える