問題タブ [long-polling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
http - トラフィックの多いWebサイトでの長いポーリングの問題
ユーザーが新しいメッセージを持っているかどうかを確認するためにサーバーで長いポーリングを行うスクリプトがあるとします。サーバー側は次のようになります
データベースを5回チェックし、変更がない場合は毎回、次のチェックまで5秒間待機します。これにより、最大実行時間は約25秒になります。
クライアントがあるページから別のページに非常に速く移動するとどうなりますか?クライアントが別のページに移動した後もサーバースクリプトが実行され続け、そこで別の変更要求が送信されると思います。
これは、多くの人がサイト内をすばやく移動している場合(各ページでの最大実行回数が25秒未満)、サーバーは存在しないページに応答しようとしているすべてのスクリプトを実行し続ける必要があることを意味しますか?もう?これにより、サーバーはすべてのスレッドプールを非常に高速に使用しませんか?
ajax - 長いポーリング接続を閉じる、jQuery-ajax
背景
私は、ロングポーリングをサポートするトルネードのようなサーバーを使用しています。ユーザーが新しい Web ページにアクセスするたびに、次のようなサーバーへの長いポーリングが設定されます。
問題
ここで、ブラウザから行われたすべてのリクエストを監視する Fiddler から取得したデータに依存します (現時点では FF)。
- ページ 1 が読み込まれ、ロング ポール リクエストが行われ、サーバー側でアイドル状態になります。
- ページ 2 へのリンクをクリックすると、そのページが読み込まれ、長いポーリング リクエストが設定されますが、ページ 1 からの長いポーリング リクエストはサーバー側でまだアイドル状態です (Fiddler によると)。
これは、ページをクリックするとすべての長いポーリング呼び出しがスタックされることを意味し、サーバー上で多くのアクティブな接続が発生します (または、接続を共有している可能性がありますか?)
私の考え
- これはトルネードのようなサーバー (epoll を使用) であるため、かなり多くの接続を処理できます。しかし、この事実は私の意見では悪用されるべきではありません。私が言いたいのは、この場合 (クライアントが消えた場合) にサーバーにタイムアウトを設定したくないということです。
- これらの独立したページは、共通のヘッドを使用し、ajax 呼び出しを介してのみコンテンツを交換することを知っていますが、今日使用するこの設計は私の呼び出しではありませんでした...
- これを解決する最善の方法は、おそらく接続を再利用することです (やってのけると思います) またはブラウザがページを離れるとすぐに閉じます (クリックして別のページに移動します)。
ありがとう
-- MyGGaN
c# - C#でロングポーリングクライアントを実行するには?
私は C# デスクトップ アプリケーションを持っており、Web サービスを問題なく使用しています (「サービス参照の追加」によって wsdl が追加されたので、オブジェクトを作成してその関数を呼び出します)。
今、私は長いポーリング手法を使用したいのですが、クライアントの観点からこれを行う方法がわかりません。
タイムアウトの設定方法 これ専用のスレッドを使用する必要がありますか? C# デスクトップ アプリケーションの例はありますか? (まだ見つかっていません)
ありがとう、ダムさん
apache-flex - Flex:BlazeDSを使用しない長いポーリング(つまり、サーバープッシュ)?
BlazeDSの使用とは別に、Flexで長いポーリング(またはサーバープッシュ)を実装する既存のライブラリはありますか?
注: Flex to Serverコメット/ゲームのロングポーリングを実装するのが好きだと読んだのですが、彼は実装が可能かどうかだけを尋ねています…実装が存在するかどうかではありません。
silverlight - ポーリング二重化はスケーリングしません...代替手段は何ですか?
私たちのテストでは、ポーリング デュプレックス バインディングは単純に拡張できず、Web ファーム内のサービスや Web ガーデンでさえも使用できないことが示されました。クライアント プッシュ方式の TCP/IP ソケットを調べましたが、ファイアウォールの問題により、ソケットを使用できるようになりました。
この問題に対する代替の「無料」ソリューションは何だろうと思っていましたか? スケーリングを可能にし、データをクライアントにプッシュできるようにします...
この記事http://tomasz.janczuk.org/2009/09/scale-out-of-silverlight-http-polling.htmlの解決策も試しましたが、最後に、データベースでのポーリングが多すぎました。そしてパフォーマンスが影響を受けました。
Silverlight アプリケーションには pub/sub 設計が必要ですが、信頼性とスケーラビリティが必要です... 何かアイデアはありますか?
.net - WCF サーバーは、変更について WCF クライアントにどのように通知しますか? (Comet や long polling などの単純なポーリングよりも優れたソリューション)
「ファイアウォールを介したクライアントへの WCF プッシュ」も参照してください。
WCFサーバーに接続するWCFクライアントが必要です。サーバー上のデータが変更された場合、クライアントはその表示を更新する必要があります。
クライアントとサーバーの間にファイアウォールがある可能性が高いためです。
- すべての通信は HTTP 経由である必要があります
- サーバーは、クライアントに対して (物理的な) 発信呼び出しを行うことができません。
私はクライアントとサーバーの両方を書いているので、soap などの使用のみにソリューションを制限する必要はありません。
「ロングポーリング」/「コメット」などの組み込みサポートを探しています
WCF でロング ポーリングを実装する方法について Drew Marsh からの最も有益な回答をありがとう。しかし、WCF の主な「セールス ポイント」は、構成ファイルで使用するチャネルを構成するだけで、この種のことができることだと思いました。 たとえば、論理的には双方向で、物理的には着信のみのチャネルが必要です。
c# - カスタムTCPロングポーリングサーバー全体でイベントを駆動する
私は、携帯電話が提供できるよりも多くの永続性を必要とする他のTCP接続の仲介役として機能するカスタムTCPベースの長いポーリングサーバーを作成しようとしています。
私がやろうとしている方法は、C#で非同期TCPサーバーを作成し、それに対応するTCPクライアントもC#で作成することです。
長いポーリングが機能する方法(私が理解している限り)は、サーバーへのTCP接続を開き、サーバーがソケットを介してデータを送り返す前に停止することです。携帯電話ネットワークで機能するハートビート間隔を見つけ(約8分が機能すると聞きましたか?)、更新されたデータがない場合は空のパケットを送信します。
ここで問題が発生します。サーバーで実行されているイベントハンドラーを使用して、クライアントのデータ要求を「リンク」する方法がわかりません…
フローは次のようになります(「クライアント」は電話上にあります)。
ユーザーがアプリケーションを起動します
クライアントは、データが変更された場合に通知を受け取るリクエストを送信します
サーバーは、クライアントのソケットオブジェクトを「イベントハンドラー」に「リンク」(登録)します。このハンドラーは、私が説明したサーバーの他のTCP接続によって呼び出されます。
イベント
oトリガーされた場合(新しいデータが到着した場合)、データをクライアントに送信します
oトリガーされない(新しいデータがない)場合は、「EmptyChanges」パケットをクライアントに送信します
クライアントは電話でデータを受信して処理します(受信したパケットのタイプに基づいてイベントハンドラーを呼び出し、サーバーから取得した「データ」をサーバーに渡します)
クライアントは、データが変更された場合に通知を受け取るリクエストを送信します
ですから、私の問題は、自分がやりたいことを実現するデザインが思いつかないということです。問題は、#3のやり方がわからないことです。あるイベントハンドラーを別のイベントハンドラーから「リンク」するにはどうすればよいですか?そして、これらは異なるスレッドで実行されることがほぼ保証されています!
したがって、私のアプリケーションは次のようになります(すべて擬似コード):
すこし?イベント駆動型にしたいのですが、PUSH駆動型のスタイルでアプリケーションを駆動する方法と、ポーリングで「慣れている」方法を理解するのに非常に時間がかかっています。
これはソケットプログラミングを使用する最初の実際の試みであり(これは必要ありません)、一時的なネットワーク上にある携帯電話の性質とサーバーがOPENTCP接続でこれらの電話の場所を維持します。
サーバープラットフォーム:Windows
サーバー言語:C#
クライアントプラットフォームのテスト:Windows
クライアント言語のテスト:C#
ターゲットクライアントプラットフォーム:Windows Mobile 6.5、iPhone、Android(クライアントは個別に作成されます)
ターゲットクライアント言語:C#、Obj-CまたはMonoTouch、Java
javascript - サーバーで変更が発生したときに Web ページを更新するにはどうすればよいですか?
x分ごとに更新するタイマーをWebページに置くのではなく、変更時にページをプッシュする方法はありますか? 私がやろうとしているのは、ページの一部だけが変更された可能性があるときにページ全体を更新しないことだと思います。更新が発生したときに FB で見たことがあります。新しいコンテンツが利用可能であるというメッセージが表示されます。
おそらく、ページを MD5 することができ、更新が発生したときに MD5 が変更され、ページがこれをチェックしている可能性があります。正確にプッシュするわけではありませんが、ページ全体のトラフィックが減少します。
サーバーで変更が発生したときに Web ページを更新するにはどうすればよいですか?
php - Ajax long polling (comet) + lighttpd v1.4.22 での php 複数インスタンスの問題
私はこのサイトを初めて使用するので、質問に関して必要な情報をすべて提供できることを願っています。
ロングポーリングを使用して「新しいメッセージが到着した通知」を作成しようとしています。window.onLoad
現在、サイトの各ページのイベントごとにポーリング リクエストを開始しています。
サーバー側では、無限ループがあります。
クライアント側には、次の (簡略化された) ajax 関数があります。
問題は、ページが読み込まれるたびに、上記のループが再び開始されることです。その結果、ユーザーごとに複数の無限ループが発生し、最終的にサーバーがハングします。
*このNewMessageArived()
関数は、MySQL DB にクエリを実行して新しい未読メッセージを探します。
*値start_session()
を取得するために実行するphpスクリプトの最初に。$current_user
time()
現在、このサイトの唯一のユーザーであるため、このループ内のファイルに書き込むことで、この動作を簡単にデバッグできます。私が見ているのは、ファイルが 10 秒に 1 回以上書き込まれているということですが、ページからページに移動したときにのみ開始されます。
追加情報が役立つ場合はお知らせください。
ありがとうございました。
c# - ASP.NET C#Webページの処理中にクライアントに情報を送信する
これをきちんと説明するかどうかはわかりませんが、ここで説明します。コードビハインドにC#を使用してasp.netアプリを作成しました。ユーザーが選択して[実行]ボタンを押した後、処理をC#で記述されたdllに渡しますが、必要なのは、クライアントに定期的に情報を送り返して、レコード数などの状況を確認できるようにする方法です。処理されており、そのようなものです。どうすればこれを達成できますか?
ありがとう