問題タブ [comet]

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 投票する
2 に答える
15980 参照

javascript - 「HTTP ストリーミング」(プッシュ) AJAX パターンのクロスブラウザー実装

クライアントがサーバーから Web ページを要求します。その後、クレントは追加の計算を行うように要求します。サーバーは一連の計算を実行し、部分的な結果が利用可能になるとすぐに送信します (テキスト形式、各行には個別の完全なアイテムが含まれます)。クライアントは、サーバーから提供された情報を使用して (JavaScript および DOM を使用して) Web ページを更新します。

これは、Ajaxpatterns サイトのHTTP ストリーミング(現在のバージョン) パターンに適合するようです。

問題は、できれば JavaScript フレームワークを使用せずに、または jQuery のような軽量フレームワークを使用して、クロスブラウザー (ブラウザーに依存しない) 方法でそれを行う方法です。

問題は、クロスブラウザー方式で XMLHttpRequest を生成することから始まりますが、主要な項目は、すべてのブラウザーがXMLHttpRequestonreadystatechangeから正しく実装するわけではないということだと思います。すべてのブラウザーが各サーバー フラッシュでイベントを呼び出すわけではありません (ところで、CGI スクリプト内から (Perl で) サーバー フラッシュを強制する方法は?)。Ajaxpatterns のサンプル コードは、タイマーを使用してこれを処理します。からの部分的な応答を検出した場合、タイマー ソリューションを削除する必要がありますか?onreadystatechangeonreadystatechange


2009 年 8 月 11 日追加

現在の解決策:
次の関数を使用して XMLHttpRequest オブジェクトを作成します。

jQuery のような (できれば軽量の) JavaScript フレームワークを使用する場合、ユーザーが jQuery をインストールしないことを選択した場合にフォールバックが必要です。

次のコードを使用して AJAX を開始します。setInterval一部のブラウザーはonreadystatechange、サーバーが接続を閉じた後 (数十秒かかる場合があります) にのみ呼び出し、サーバーがデータをフラッシュするとすぐには呼び出さないため (毎秒またはそれ以上の頻度で) 使用されます。

関数は最もhandleResponse複雑なものですが、スケッチは次のようになります。もっとうまくできるでしょうか?軽量の JavaScript フレームワーク (jQuery など) を使用してどのように行うのでしょうか?

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

java - Javaサーブレット:PrintWriter.flush()がフラッシュしないのはなぜですか?

私は現在、持続的接続で一度にデータのチャンクを送信する必要があるCometアプリケーションを作成しています。ただし、接続を閉じる前にクライアントへのメッセージをフラッシュするのに問題があります。PrintWriter.flush()メソッドが思ったように動作しない理由はありますか?

これは私のTomcatCometの実装です:

そこで、ここで「BEGIN!」というメッセージを送信しようとしています。その後、接続を開いたままにして、より多くのデータを送信できるようにします。ただし、接続が閉じられるまでメッセージは送信されないようです。

これは私のajaxコードです:$。post('comet'、function(data){alert(data);});

このコードを実行した後、Firebugは、これが応答ヘッダーであることを通知します。サーバー:Apache-Coyote / 1.1 Transfer-Encoding:チャンク日付:2009年7月13日月曜日21:16:29 GMT

これにより、ブラウザがデータを受信したと思いますが、接続が閉じられる前にページ上の何かを更新するにはどうすればよいですか?

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

wcf - WCF ポーリング二重サービスは他のクライアントで使用できますか?

Silverlight クライアントを使用してサーバー アプリを作成しています。ある時点で、Silverlight 以外のクライアントが私のサービスを使用できるようにしたいと考えています。現在、ポーリングされる WCF サービスをいくつか作成しましたが、応答性に満足していません。コードを Silverlight/WCF 二重ポーリングを使用するように切り替えることを考えていますが、そうすると、唯一のクライアントとして Silverlight を使用することになりますか? 通常の WCF http サービスを使用して独自のロング ポーリング サービスを作成する方がよいでしょうか?

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

ajax - WebページからこのCometsアプリケーションを呼び出す方法

http://tomcat.apache.org/tomcat-6.0-doc/aio.htmlに示されている2つのクラスを実装しました。これは、Tomcatのcomet実装を使用してメッセンジャーアプリケーションを提供します。

これをWebインターフェイスに接続して、何かを表示するにはどうすればよいですか。

これらが基本的なステップだと思います(詳細はわかりません)。

  1. ChatServletを呼び出してCometEventを(どういうわけか)渡す従来のイベント(ボタンクリックまたはAJAXイベント)を作成する必要があります-おそらくBEGIN
  2. それ以降、READイベントを入力パラメーターとして使用してクライアントに何かを送信するたびに、コードでイベントメソッドを呼び出させます。

以下の2つのクラスをコピーしました。




0 投票する
7 に答える
13927 参照

nginx - 彗星へのnginxプロキシ

Linuxの達人の助けが必要です。コメットサーバーを含むWebアプリに取り組んでいます。コメットサーバーはlocalhost:8080で実行され、クライアントが接続するためのURL localhost:8080/long_pollingを公開します。私のウェブアプリはlocalhost:80で実行されます。

私はnginxを使用してnginxからcometサーバー(localhost:8080 / long_pollingにプロキシされたlocalhost:80 / long_polling)にリクエストをプロキシしましたが、このソリューションには2つの不満があります。

  1. nginxを使用すると、すべてのタイムアウト設定を600秒に変更したにもかかわらず、1分後に504ゲートウェイがタイムアウトします。
  2. とにかくnginxがcometサーバーにプロキシする必要はありません-nginxプロキシは長期的な接続(おそらく最大30分)用に構築されていません。むしろ、クライアントがコメットサーバーに直接接続できるようにし、コメットサーバーに処理させたいと思います。

だから私の質問は:nginxプロキシを使用せずにlocalhost:8080 / long_pollingをlocalhost:80 / long_pollingに公開できるLinuxのトリックはありますか?何かがあるに違いない。そのため、この質問はおそらくLinuxの第一人者が最もよく答えることができると思います。

/ long_pollingをポート80で公開する必要があるのは、AJAXを使用してポート80に接続できるようにするためです(ajax same-origin-policy)。

これは参考のために私のnginxproxy.confです:

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

php - CometとPHP:PHPチャットシステムでCometを使用する方法は?

コメットを使用してPHPで簡単なチャットシステムを構築する必要があります。

このプロジェクトへの最善のアプローチはわかりません。

使用するのに最適なテクニック(クロスブラウザーがいいでしょう)と、それを実装する方法は何ですか?すでにcometをサポートしているライブラリを使用できますBayeuxプロトコルは使いたくない

チャットシステム用にPHPバックエンドをすでに実行していますが、クライアントとサーバー間の相互作用についていくつかのアイデアが必要です。

よろしくお願いします。よろしく。