背景
私は、ロングポーリングをサポートするトルネードのようなサーバーを使用しています。ユーザーが新しい Web ページにアクセスするたびに、次のようなサーバーへの長いポーリングが設定されます。
$.ajax({
type: 'GET',
url: "/mylongpollurl/",
dataType: 'application/json',
success: function(json) {
// I do stuff here
},
error: function(xhr, errText, ex) {
// If timeout I send a new long-poll request
}
});
問題
ここで、ブラウザから行われたすべてのリクエストを監視する Fiddler から取得したデータに依存します (現時点では FF)。
- ページ 1 が読み込まれ、ロング ポール リクエストが行われ、サーバー側でアイドル状態になります。
- ページ 2 へのリンクをクリックすると、そのページが読み込まれ、長いポーリング リクエストが設定されますが、ページ 1 からの長いポーリング リクエストはサーバー側でまだアイドル状態です (Fiddler によると)。
これは、ページをクリックするとすべての長いポーリング呼び出しがスタックされることを意味し、サーバー上で多くのアクティブな接続が発生します (または、接続を共有している可能性がありますか?)
私の考え
- これはトルネードのようなサーバー (epoll を使用) であるため、かなり多くの接続を処理できます。しかし、この事実は私の意見では悪用されるべきではありません。私が言いたいのは、この場合 (クライアントが消えた場合) にサーバーにタイムアウトを設定したくないということです。
- これらの独立したページは、共通のヘッドを使用し、ajax 呼び出しを介してのみコンテンツを交換することを知っていますが、今日使用するこの設計は私の呼び出しではありませんでした...
- これを解決する最善の方法は、おそらく接続を再利用することです (やってのけると思います) またはブラウザがページを離れるとすぐに閉じます (クリックして別のページに移動します)。
ありがとう
-- MyGGaN