問題タブ [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.
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 など) を使用してどのように行うのでしょうか?
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
これにより、ブラウザがデータを受信したと思いますが、接続が閉じられる前にページ上の何かを更新するにはどうすればよいですか?
wcf - WCF ポーリング二重サービスは他のクライアントで使用できますか?
Silverlight クライアントを使用してサーバー アプリを作成しています。ある時点で、Silverlight 以外のクライアントが私のサービスを使用できるようにしたいと考えています。現在、ポーリングされる WCF サービスをいくつか作成しましたが、応答性に満足していません。コードを Silverlight/WCF 二重ポーリングを使用するように切り替えることを考えていますが、そうすると、唯一のクライアントとして Silverlight を使用することになりますか? 通常の WCF http サービスを使用して独自のロング ポーリング サービスを作成する方がよいでしょうか?
ajax - WebページからこのCometsアプリケーションを呼び出す方法
http://tomcat.apache.org/tomcat-6.0-doc/aio.htmlに示されている2つのクラスを実装しました。これは、Tomcatのcomet実装を使用してメッセンジャーアプリケーションを提供します。
これをWebインターフェイスに接続して、何かを表示するにはどうすればよいですか。
これらが基本的なステップだと思います(詳細はわかりません)。
- ChatServletを呼び出してCometEventを(どういうわけか)渡す従来のイベント(ボタンクリックまたはAJAXイベント)を作成する必要があります-おそらくBEGIN
- それ以降、READイベントを入力パラメーターとして使用してクライアントに何かを送信するたびに、コードでイベントメソッドを呼び出させます。
以下の2つのクラスをコピーしました。
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つの不満があります。
- nginxを使用すると、すべてのタイムアウト設定を600秒に変更したにもかかわらず、1分後に504ゲートウェイがタイムアウトします。
- とにかく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です:
php - CometとPHP:PHPチャットシステムでCometを使用する方法は?
コメットを使用してPHPで簡単なチャットシステムを構築する必要があります。
このプロジェクトへの最善のアプローチはわかりません。
使用するのに最適なテクニック(クロスブラウザーがいいでしょう)と、それを実装する方法は何ですか?すでにcometをサポートしているライブラリを使用できます。(Bayeuxプロトコルは使いたくない)
チャットシステム用にPHPバックエンドをすでに実行していますが、クライアントとサーバー間の相互作用についていくつかのアイデアが必要です。
よろしくお願いします。よろしく。