4

AppWebオープンソースWebサーバーを使用してインタラクティブチャットアプリケーションを開発しようとしています。
Webサーバーが更新されたメッセージをクライアントに送信できるようにするメカニズムが必要です。これにより、リモートusreがメッセージを送信すると、クライアント側で自動的に更新されます。

HTML5Webソケットとサーバー送信イベントを使用してこれを行う方法がいくつかあります。
ただし、HTML5ではなくHTMLとJavaScriptでのみ実装する必要があります。

したがって、新しいイベントのためにWebサーバーをプールし続けるプールメカニズムが必要です。

では、ソケットを使用してJavascriptでプーリングメカニズムをどのように記述すればよいでしょうか。
サーバー側でどのように実装する必要がありますか?

ありがとう!

4

2 に答える 2

3

すでにいくつかの例があります...サーバー側に応じて、java-hello-worldまたはphp-hello-worldまたは...

WebSocketを使用できない場合は古い方法で間隔を作成window.setIntervalし、サーバーからデータをプルする必要があります。$.ajax()双方向接続(websocket)に代わる他の方法はわかりません... kayahrsの回答を参照してください

あなたがそれを求めたように:xhr
$.ajax()を行うjQueryの方法です。基本的に、サーバーへの非同期リクエストを起動し、xml、json、text、または...(何でも)を返します。このリクエストが戻ってくると、サポートされているeventHandlerが起動され、レスポンスに反応することができます。プレーンなxhrを使用することもできますが、元のxhrを処理するのは少し厄介です。 jQueryは、たとえば、のいくつかの省略形のオーバーロードをサポートします。、、..。
$.ajax()$.getJSON()$.get()

サンプル実装:

$.get("test.cgi", function(data){
    alert("Data Loaded: " + data);
});
于 2011-04-21T06:14:52.537 に答える
2

サーバーからクライアントにメッセージを送信するための別の手法があります。これには、接続を閉じないPHPスクリプト(またはサーバー側で使用している手法)に接続するiframeを使用する必要があります。その後、PHPスクリプトは、クライアントに何かについて通知する必要がある場合は常にJavaScriptメッセージを送信します。各メッセージの後で、サーバーは出力ストリームをフラッシュして、データが実際にクライアントに到達し、出力バッファーによってキャッシュされないようにします。これは、iframeにロードされたPHPスクリプトの小さなサンプルコードです(基本を示すために、テストも完了もされていません)。

<html>
  <body>
    <script type="text/javascript">

      function receiveMsg(data)
      {
          // Do something with the data, for example send it to some function
          // in the parent frame (Where your chat application lives)
      }

      <?php

      while (true) // You may also implement some abort state which should
                   // be checked here
      {
          $data = waitForData(); // This is your magic function on the server
                                 // which waits for data to be send to the client
          echo "receiveMsg('" . $data . "');"; // Let's say data is just a string.
                                             // You may want to use JSON instead
          flush();
      }
      ?>
    </script>
  </body>
</html>

この方法の利点は、ポーリングに依存しないことです。したがって、x秒ごとにサーバーにリクエストを送信する必要はありません。また、サーバー側で適切に処理を行うと、1人のユーザーから送信されたメッセージは、x秒後ではなく、他のユーザーによって可能な限り高速に受信されます。欠点は、チャットユーザーごとに永続的なHTTP接続があることです。ただし、これにより、サーバー上で必要なリソースが少なくなり、チャットユーザーごとに1分あたり数十の完全なHTTPリクエストが発生する可能性があります。

于 2011-04-21T06:39:37.563 に答える