4

私が委託している新しいビルドの PHP アプリで長いポーリングを置き換えるソリューションとして、websockets を検討し始めています。

人々が私を助けてくれるのではないかと思ういくつかの質問があります。

  1. Nodejs サーバーは PHP を呼び出すことができますか?もしそうでない場合、接続に関して Apache を経由するのと同じ欠点を被ることはありませんか? nodejs は非ブロッキングであり、Apache などはそうではないことは誰もが知っていますが、Nodejs が独自の手順で PHP サーバーを呼び出すだけの場合、同様の方法でボトルネックにならないでしょうか?
  2. PHP と Websocket は相性が良いですか?
  3. 明らかにNodejsでのみ動作するsocketio以外の良いjsライブラリはありますか?
  4. Websockets と PHP バックエンドを使用する良いチュートリアルを見つけた人はいますか?

考えは大歓迎です。

4

2 に答える 2

2

質問の言い換えをお許しください。

1: Node.js は PHP を呼び出すことができますか? それには Apache と同じ欠点があるのではないでしょうか?

1 回限りの PHP スクリプトの呼び出しには、Web ページの呼び出しと同じ一般的な欠点がありますが、余分な処理レイヤーが削除される点が異なります。Apache や任意の Web サーバー自体は非常に薄いレイヤーであるため、多少の時間は節約できますが、節約できる効果はわずかです。

なんらかの理由で PHP が Node.js よりもクライアントのデータ収集に効果的である場合は、アプリケーションに PHP を組み込むのが賢明かもしれません。

2: PHP と WebSockets は相性がいいですか?

従来の PHP スクリプトは通常、リクエストごとに 1 回実行されることを意図しています。大多数の PHP 開発者はイベント駆動型開発に慣れておらず、PHP 自体は (まだ) 非同期処理をサポートしていません。

PHP は高速で成熟したスクリプト言語であり、多くの疣贅や欠点を抱えながらも、ますます高速化しています。(タイピングが弱いのが欠点だと言う人もいれば、タイピングが十分に弱くないのが欠点だと言う人もいます。)

とはいえ、どの言語でも WebSocket を実装するために最低限必要なのは、基本的な TCP ポートを開いてリクエストをリッスンする機能です。PHP の場合、C ソケット ライブラリのシン ラッパーとして実装されます。追加の拡張機能とフレームワークを使用すると、PHP で TCP ソケットを操作する感覚を変えることもできます。

PHP のガベージ コレクタも成熟しています。メモリ リークは、メモリ空間をひどく無視したり (Zend Framework のことを言っています)、自分は賢いと思っている開発者や、ガベージ コレクション システムを簡単に打ち破れることを証明したいと考えている開発者による、意図的なガベージ コレクション システムの妨害行為のいずれかによって発生します。 GC。(ネタバレ: 詳細を知っていれば、どの言語でも簡単です!)

PHP でデーモン (実行時間の長いバックグラウンド プロセス) を設定することは非常に可能であり、非常に簡単です。正常に再起動し、接続を同じスクリプトの新しいバージョン、または異なるバージョンの PHP を実行している同じサーバー上の同じスクリプトに渡すのに十分な動作をさせることさえ可能です。ほんの少し。

相性が良いかどうかは、完全に開発者次第です。PHP を使用して WebSocket サーバーを作成したり、既存のサーバーの 1 つを使用したりすることに意欲的で、能力があり、満足していますか? はい?それなら、あなたはPHP と WebSocket にぴったりです。

3: WebSocket 用の JS ライブラリ

正直なところ、私はそれらを調査していません。

4: PHP と Websocket を使用するためのチュートリアル

私は個人的にこのチュートリアルが好きです: http://www.phpbuilder.com/articles/application-architecture/optimization/creating-real-time-applications-with-php-and-websockets.html

そのチュートリアルの詳細は、その特定の WebSockets サーバーではすぐに時代遅れになるという正当な権限がありますが。(ただし、そのサーバー用にアクティブに維持されるレガシー ブランチは引き続き存在します。)

リンクの腐敗の場合:

PHP-Websockets サーバー (Github で入手可能、近日中に公開予定) を使用して、基本WebSocketServer抽象クラスを拡張し、抽象メソッドprocess()connected()、およびを実装しclosed()ます。

ただし、上記のリンクにははるかに優れた情報があるため、リンクが存在する限りそれに従ってください.

于 2015-06-16T00:11:32.407 に答える
1
  1. Apacheを通過すると、同じボトルネックにぶつかります。これは、 lighthttpdnginxなどの別の Web サーバーを使用することで解決できます。ノードもまったく必要ありません。
  2. PHP には適切な共有メモリがなく、WebSocket の最大の利点を無関係にしています。ユーザー間の対話を望まないのであれば、それで十分なはずですが、それでも PHP の使用には眉をひそめなければなりません。PHP は多くの点で優れていますが、リアルタイム通信はその 1 つではありません。
  3. https://github.com/einaros/wsを参照してください。
  4. PHP は適切なバックエンドではありません。Node.NETC/C++Javaなど、独自のサンドボックスで実行して忘れない実行モデルを持つものはすべて適切に一致します。PHP は、実際の Web サイトや Web サービスなどの短時間実行に適していますが、リアルタイム接続には適していません。
于 2013-03-05T09:57:53.197 に答える