私はいくつかの記事を読んでみましたが、その概念についてはまだはっきりしていません。
誰かが私にこれらの技術が何であるかを説明するのを狙って撮りたいですか。
私が毎回出会ったことの1つは、サーバーが接続を開いたままにし、データをクライアントにプッシュすることでした。接続はどのように開かれた状態で維持され、クライアントはどのようにプッシュデータを取得しますか? (クライアントはデータをどのように使用していますか、多少のコードが役に立つかもしれません)。
今、私はリアルタイムアプリケーションのためにそれらのうちどれを使うべきですか。私は(socket.io [node.jsライブラリ]で)ウェブソケットについて多くのことを聞いていますが、なぜPHPではないのですか?
以下の例では、クライアントはブラウザ、サーバーはWebサイトをホストしているWebサーバーです。
これらのテクノロジを理解する前に、まずclassic HTTP Webトラフィックについて理解する必要があります。
利用可能な新しい情報がある場合、サーバーはイベントをクライアントに送信します。
サーバーとクライアントは、新しいデータ(どちらかの側)が使用可能になったときに互いにメッセージを送信できるようになりました。
Cometは、リアルタイムアプリケーションを実現するためにストリーミングとロングポーリングを使用するHTML 5以前の技術の集まりです。 ウィキペディア または この 記事を読んでください。
今、それらのうちどれを私がコーディングする必要があるリアルタイムアプリに使うべきです。私は(socket.io [node.jsライブラリ]で)ウェブソケットについてたくさん聞いていますが、なぜPHPではないのですか?
WebSocketでPHPを使うことができます、 Ratchet をチェックしてください。
Tiemeは彼のすばらしい答えに多くの努力を注ぎました、しかし私はOPの質問の核心はこれらの技術がどのようにPHPに関係するかではなく各技術がどのように働くかであると思います。
PHPは、明白なクライアントサイドのhtml、css、およびjavascript以外に、Web開発で最も使用されている言語です。それでも、リアルタイムアプリケーションに関してはPHPには2つの大きな問題があります。
1)PHPは非常に基本的なCGIとして始まりました。 PHPは初期の段階から非常に進歩していますが、小さなステップで起こりました。 PHPは、今日の組み込み可能で柔軟なCライブラリになるまでに、すでに何百万ものユーザーを抱えています。そのほとんどは、以前の実行モデルに依存していたため、まだ作成されていません。内部的にcgiモデルを回避しようとする確固たる試み。コマンドラインインタフェースでさえ、PHPライブラリ(Linuxの場合はlibphp5.so、Windowsの場合はphp5ts.dllなど)が、まだGET/POST要求を処理するcgiであるかのように起動します。まだ「ページ」を作成してライフサイクルを終了する必要があるかのように、コードを実行します。その結果、マルチスレッドまたはイベントドリブンプログラミング(PHP userspace内)はほとんどサポートされておらず、リアルタイムのマルチユーザーアプリケーションには現在実用的ではありません。
PHPには、PHPユーザースペースにイベントループ(libeventなど)およびスレッド(pthreadなど)を提供するための拡張機能がありますが、ごくわずかに、これらを使用するアプリケーションはほとんどありません。
2)PHPはまだガベージコレクションに関して重大な問題を抱えています。これらの問題は常に改善されてきましたが(上記のようにライフサイクルを終了するための最大のステップと思われます)、長時間実行するPHPアプリケーションを作成する最善の試みでも定期的に再起動する必要があります。これはまた、リアルタイムアプリケーションには実用的ではありません。
PHP 7もこれらの問題を解決するための素晴らしいステップとなるでしょう、そしてリアルタイムアプリケーションのプラットフォームとして非常に有望に思われます。
私はこれらについて書き留めてみて、 Javaの観点から例を集めて書いた 。
同じテーマを検討しているすべてのJava開発者のためにここにそれを置く。
WebアプリケーションでNode.JSを使用できるのは、リアルタイム通信だけです。 Node.JSは、WebSocketの場合は非常に強力です。したがって、「Node.jsを介したPHP通知」は素晴らしい概念です。
この例を参照してください。 PHPおよびNode.jsを使用したリアルタイムチャットアプリケーションの作成