1. ホーム
  2. php

[解決済み] Long-Polling、Websocket、Server-Sent Events (SSE)、Cometとは何ですか?

2022-03-18 21:11:50

質問

いくつかの記事を読んでみましたが、まだコンセプトがよくわかりません。

どなたか、これらの技術がどのようなものであるかを説明していただけませんか。

  1. ロングポーリング
  2. サーバー送信イベント
  3. ウェブソケット
  4. コメット

毎回出くわすのが、サーバーがコネクションを開いたまま、クライアントにデータをプッシュするというものです。接続はどのように保たれ、クライアントはプッシュされたデータをどのように取得するのでしょうか?(クライアントはどのようにデータを使用するのでしょうか。いくつかのコードが参考になるかもしれません。)

さて、リアルタイムアプリにはどれを使ったらいいのでしょう。ウェブソケット(socket.io [node.jsのライブラリ]を使用)についてはよく聞きますが、なぜPHPではないのでしょうか?

どのように解決するのか?

以下の例では、クライアントはブラウザ、サーバーはウェブサイトをホストしているウェブサーバーです。

これらの技術を理解する前に、次のことを理解する必要があります。 クラシック HTTPのWebトラフィックが最初にあります。

通常のHTTPです。

  1. クライアントがサーバーにウェブページを要求する。
  2. サーバーはレスポンスを計算する
  3. サーバーがクライアントに応答を送信する。

Ajaxポーリング。

  1. クライアントが通常のHTTP(上記HTTP参照)を使ってサーバーにウェブページを要求します。
  2. クライアントは要求されたウェブページを受信し、一定時間(例えば0.5秒)ごとにサーバーにファイルを要求するページ上のJavaScriptを実行する。
  3. サーバーは、通常のHTTPトラフィックと同様に、各レスポンスを計算して送り返します。

Ajax Long-Polling。

  1. クライアントがサーバーに通常のHTTP(上記のHTTPを参照)を使ってウェブページを要求します。
  2. クライアントは要求されたウェブページを受信し、サーバーにファイルを要求するページ上のJavaScriptを実行する。
  3. サーバーは要求された情報を即座に応答するのではなく、要求された情報があるまで待ちます。 新しい の情報を利用できるようになります。
  4. 新しい情報がある場合、サーバーは新しい情報を応答する。
  5. 新しい情報を受け取ったクライアントは、すぐに別のリクエストをサーバーに送信し、処理を再開します。

HTML5 Server Sent Events (SSE) / EventSource:

  1. クライアントが通常のHTTP(上記のHTTPを参照)を使用してサーバーにウェブページを要求した場合。
  2. クライアントは要求されたウェブページを受信し、ページ上のJavaScriptを実行することでサーバーへの接続を開きます。
  3. サーバーは新しい情報があると、クライアントにイベントを送信する。

HTML5 Websocketです。

  1. クライアントが通常のhttp(上記のHTTPを参照)を使ってサーバーにウェブページを要求します。
  2. クライアントは要求されたウェブページを受信し、サーバーとの接続を開くページ上のJavaScriptを実行します。
  3. サーバーとクライアントは、(どちらか一方の)新しいデータが利用可能になると、お互いにメッセージを送ることができるようになりました。

    • サーバーからクライアントへのリアルタイムトラフィック クライアントからサーバーへ
    • イベントループを持つサーバーを利用するとよいでしょう
    • WebSocketを使用すると、別のドメインのサーバーと接続することが可能です。
    • また、サードパーティがホストするウェブソケットサーバーを使用することも可能で、たとえば次のようになります。 プッシャー または その他 . この方法だと、クライアント側を実装するだけなので、とても簡単です!
    • もっと読みたい方は、以下がとても参考になります: ( 記事 ), (記事) ( チュートリアル ).

コメット

Cometは、ストリーミングとロングポーリングを使用してリアルタイムアプリケーションを実現するHTML5以前の技術の集合体です。詳細はこちら ウィキペディア または これ の記事をご覧ください。


さて、リアルタイムアプリ(必要なもの)にはどれを使えばいいのでしょうか? をコーディングしてください)。ウェブソケットについてはよく聞きます(socket.io [a node.jsのライブラリ])が、なぜPHPではないのでしょうか?

WebSocketでPHPを使うことができますので、以下をチェックしてみてください。 ラチェット .