5

私は現在、クライアントとサーバーの通信に websocket を使用する PHP アプリケーションを開発しています。PHP は、スレッド化メカニズム、メモリ管理 (循環参照)、または扱いにくいソケット ライブラリがないため、サーバー アプリケーションに使用すべきではないと何度も耳にしました。

これまでのところ、すべてがうまく機能しています。phpws を websocket ライブラリとして使用し、Doctrine DBAL を使用してさまざまなデータベース システムにアクセスしています。PHP はバージョン 5.3.8 です。サーバーは、最大 30 のクライアントにサービスを提供する必要があります。しかし、特にここ数日は、長時間実行されるアプリケーションに対して PHP は効果がないという記事をいくつか読みました。

PHP で websocket を使用し続けるか、サーバー側アプリケーション全体を再構築する必要があるかはわかりません。Socket.IO で Python を試しましたが、期待した結果は得られませんでした。

次のオプションがあると思います。

  • すべてをそのままにしておいてください。
  • アプリケーションで Socket.IO と組み合わせて Ajax を使用するようにします。たとえば、データがサーバーに送信されるときにクライアントの ajax 呼び出しを呼び出すサーバー側スクリプトを実行します。

最後のポイントはかなり興味深いように思えますが、いくつかの作業が必要になります.. サーバーがすべてのクライアント要求を一度に実行するのは問題でしょうか?

あなたは何をお勧めします?PHP のメモリ管理の問題 (クライアントがサーバーにデータを送信するたびに gc_collect を使用しています) はまだ有効ですか? PHP をサーバーとして使用しない明白な理由 (スレッドがないなど) 以外に、他の理由はありますか?

4

2 に答える 2

4

サーバーの別のポートのノード サーバーで socket.io を実行してみてください (つまり、goDaddy のようなホスティング プランを使用していない場合)。

私はそれを使用していますが、パフォーマンスは本当に満足しています。私のphpファイルを提供するポート80にApacheサーバーがあり、サーバーとクライアントの通信は、ポート8080(dev)または843(prod)でsocket.ioを実行しているNode.jsサーバーを使用して行われます。

Node.js は非常に軽量で優れたパフォーマンスを発揮しますが、サーバーとして実行する必要があります。Nodejitsu.comは、websocket プロトコルを使用できるホスティング ソリューションであり、ベータ版であるため、今のところ無料です。socket.io を使用してポート 80 でリッスンする必要があることに注意してください。これはネットワークの制限です。

すべてのページにポート 80 でアクセスできるようにする場合は、varnishなどのリバース プロキシが必要になります。

それが役立つことを願っています!良い1日を。

于 2012-08-17T17:23:49.093 に答える
0

PHP をサーバーとして使用しない明白な理由 (スレッドがないなど) 以外に、他の理由はありますか?

そうです、多くのソケット関数は互いに互換性がなく、デバッグするのは大変なことです。

私は自分で似たようなことを試してみましたが、理にかなっていると思っていたすべての機能をやめてしまい、期待したことをしませんでした。

于 2012-08-17T13:46:02.090 に答える