問題タブ [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.

0 投票する
1 に答える
126 参照

ajax - AJAX 応答のセグメント化に関する追加の質問

この質問は、私が以前に尋ねた質問に関連しています。こちらを参照してください。

セグメント化された ajax 応答を実装する方法として、これを行うコードを作成しました。

クライアントは最初に、プロセスを初期化するスクリプトを呼び出します。サーバー側では、startScript.cgi コードがデータの生成を開始し、これを行う際に応答をチャンクにグループ化し、それらを順番に索引付けされた個々のファイル (chunk1.txt、chunk2.txt など) に書き込みます。startScript.cgi がこのプロセスを開始した直後に、クライアント側は 2 番目の ajax 要求を開始し、gatherOutput.cgi にパラメーター ?index=0 を指定して送信します。

gatherOutput.cgi はリクエストを見て、'chunk'.$index.'.txt' を調べてデータを返します。クライアントはこれを html に出力し、パラメーター ?index=1 などを指定して、gatherOutput.cgi への 2 番目の ajax 要求を開始します。これは、startScript.cgi からのすべてのデータが報告されるまで続きます。

gatherOutput.cgi が「chunk$index.txt」を見つけられない場合、次のループに入ります。

startScript.cgi は完了するまでに長い時間がかかる可能性のあるコードを実行することに注意してください。そのため、新しい出力を生成するときに startScript.cgi からの古い出力を同時にブロードキャストすることが重要です。

これに関する問題は、パフォーマンスが低下し、かなり前に作成されたにもかかわらず、出力が出るまでに時間がかかることです。これは、ハードドライブへのアクセスが startScript.cgi の CPU 操作に比べて非常に遅いことが原因であると想定しているため、gatherOutput.cgi は新しいチャンクが書き込まれるのを頻繁に待機しているか、またはクライアントが gatherOutput.cgi の読み取りを頻繁に待機しています。ファイルなど。ただし、他の問題がある可能性があります。

この問題を解決するためのアイデアや提案はありますか? または、誰かがこの問題に対して別のアプローチをとっていれば、それも素晴らしいでしょう。

ちなみに、startScript.cgi は 1 回しか呼び出されず、大きなタスク システム タスク (exec、system、backticks などのシステム エスケープを使用) を開始します。

0 投票する
1 に答える
922 参照

python - djangoを使用してPythonで簡単なサーバープッシュ実装を作成するには?

サーバーに統合するロングプーリングまたはコメットを使用して、単純なサーバープッシュ実装を作成したいと思います。
すべてが内部でどのように行われるかを学びたいので、twisted のようなネットワーク フレームワークを使用したくありません。
具体的に何を学べばいいの?
どの仕様を見ればいいですか?
私はApacheに適合するものを好むので、長いプーリングの方が良いですよね? Stackless Python
のような外部フレームワークなしでそのようなことを実装する方法はありますか?

0 投票する
1 に答える
415 参照

php - このチャット スクリプトは効率的ですか?

PHP と ajax を使用してチャットを行い、while ループを使用してデータベースで新しいメッセージをチェックしています。

これは、メッセージを取得するコードです。

これで問題なく動作し、php ファイルは新しいメッセージがあるかどうかを常にチェックし、ページが読み込まれると更新機能が開始され、応答を待ちます。しかし、それは効率的ですか?これを Web サイトで使用すると、while ループのためにサーバーに過度の負荷がかかるのではないかと心配しています。whileループをよりサーバーフレンドリーにする方法を知っている人はいますか?

0 投票する
1 に答える
1024 参照

iphone - ソケットが使用可能な場合に HTTP ロング ポーリングを使用する (iPhone、Blackberry など)

私は現在、サーバーと web/iPhone/Blackberry クライアントで Node.js を使用して単純なクロス プラットフォーム アプリを作成しています。帯域幅と遅延の要件は、IRC の「パーティー ゲーム」やチャット システムで見られるものと似ています。私は、HTTP ロング ポーリングを使用して Web クライアントを開発しました (双方向で JSON を使用します)。

iPhone/blackberry の場合、組み込みの HTTP ライブラリを使用して現在の実装と通信するか、サーバーにソケット リスナーを記述してソケットを使用して通信することができます。そうすることに何か利点はありますか?ブラウザー以外の HTTP クライアントが推奨されないように見えるのはなぜですか?

0 投票する
1 に答える
903 参照

php - コメット スタイルのメッセージング: ポーリングせずにサーバー部分を実装する方法は?

私はチャットのような Web アプリケーションを計画しています。あるユーザーが何かを投稿すると、他のすべてのユーザー (つまり、ブラウザーでそのサイトを指しているユーザー) が即座に更新されます。これに対する一般的な選択は、ロングポーリング AJAX リクエストを使用したコメット スタイルのメッセージングです。jQuery を使用してクライアント側の部分を作成することは、それほど問題ではありません。

しかし、PHP でサーバー側の部分を実装するにはどうすればよいのでしょうか。投稿/メッセージは MySQL に保存されます。質問は、データベースに新しい投稿を書き込んだ後、待機中のすべてのリクエストに、ポーリングを使用せにデータが利用可能であることを通知するにはどうすればよいですか? ポーリングは機能しますが、見苦しく、リソースを浪費するため、これは私が望んでいないことです:

ここで役立つ MySQL の機能はありますか? ある種の IPC は役に立ちますか? サーバーは Apache を実行します。

0 投票する
1 に答える
900 参照

jquery - ロング ポーリング リクエストで FireFox が「回転」しないようにするにはどうすればよいですか?

私はロングポーリングリクエストに以下を使用しています(これはgetJSONに似たプラグインです)...

要求は、30 秒が経過するか、送信する情報が存在する (ロングポーリング) まで終了しません。

問題は、下部に「Waiting for URL...」と表示されるブラウザが Firefox だけであることです。これを防ぐ方法はありますか?

0 投票する
2 に答える
2259 参照

jquery - TomcatサーバーでのJQueryを使用した長時間のポーリングに関する問題

この例http://tomcat.apache.org/tomcat-7.0-doc/aio.htmlに従ってCometServletを作成しました。次に、JQueryを使用してデータを取得しようとしました。コードは次のとおりです。

問題は、成功関数がトリガーされないことです(FireBugコンソールでデータが来ることを確認できますが)。サーバーが応答ライターを閉じないために発生すると思いますが、それは長いポーリングの目標です:)

誰かがそれをどのように解決できるかについて何か考えを持っていますか?

0 投票する
3 に答える
5301 参照

google-app-engine - Google App Engineで長時間のポーリングは可能ですか?

サーバーを頻繁にポーリングする必要のあるアプリケーションを作成する必要がありますが、GAEにはリクエストに制限があるため、大量のリクエストを作成すると非常にコストがかかる可能性があります。長いポーリングを使用して、変更を最大30秒間待機させることは可能ですか?

0 投票する
4 に答える
10074 参照

php - 単純な PHP ロング ポーリング チャット スクリプト、単純すぎませんか?

私はシンプルなチャットアプリに取り組んでおり、おそらく 1 部屋あたり 10 人から 20 人のユーザーです。

データベースに新しいメッセージを問い合わせるスクリプトは、取得するすべてのリクエストに対して単純すぎるように見えます。

以下は、新しいメッセージをループするコードのブロックです。スクリプトの残りの部分は、変数、クエリの構築、および json 応答オブジェクトを取得するだけです。

上記のブロックは、データベースに新しいメッセージを 10 秒ごとにクエリし、10 秒後に新しいメッセージがない場合はブラウザに通知します。ブラウザは 5 秒間待ってから、別のリクエストを送信して新しいメッセージを取得します。

ただし、スクリプトが新しいメッセージを見つけた場合、ブラウザは、サーバーから新しいメッセージの応答を受け取るとすぐに、さらに新しいメッセージを要求します。

このプロセスは延々と続きます...

では、このプロセスをさらに最適化するにはどうすればよいでしょうか? これでいいのか?私のローカルサーバーでは正常に動作していますが、少数のユーザーがすべてのリクエストとループでライブサーバー (共有ホスト) を過負荷にする可能性があるのではないかと心配しています。

これは、firebug http://pixbush.com/chat/chat.phpで確認できるライブデモです。

0 投票する
1 に答える
1126 参照

java - Tomcat 7 CometProcessor でコメット イベントが欠落している

Tomcat 7.0 でロングポーリングを実装するために CometProcessor を使用しています。私を悩ませているのは、CometEvent.EventType.BEGIN 以外のイベントを取得できないことです。コードサンプル:

BEGIN イベントで応答オブジェクトをローカル配列に格納するため、メモリ リークが発生する可能性があると思います。

何が間違っているのか考えている人はいますか?