4

Websockets を使用して PHP ソケット サーバーに接続したいと考えています。このサーバーは、データベースで何かが変更されたかどうかを一定の間隔でチェックし、変更をクライアントに送り返す必要があります。したがって、クライアントが接続されている場合、クライアント (この場合は Web ブラウザー) がページ上にある限り、接続は開いたままにする必要があります。

次に、サーバーは一定の間隔でデータベースをチェックし、必要に応じてデータを送り返す必要があります。問題が Websocket ではないことはわかっています (すべての主要なブラウザーがまだ Websocket をサポートしているわけではないことを除いて)。主に私の関心事はPHPです。PHP でサーバーを作成したいのですが、必要なだけ PHP コードへの接続を開いたままにしておくことはできますか?

また、間隔はどうですか。通常、C#.NET exe アプリケーションでは、タイマーを作成するだけです。これはPHPでどのように行うことができますか??

これがすべて可能である場合、PHP コードを Apache Web サーバーで単純に実行できますか?

4

1 に答える 1

5

通常、PHP でソケット サーバーを作成する場合は、コマンド ライン経由で実行することをお勧めします。考慮に入れたい事項は次のとおりです。

通常、共有サーバー上にないソケットにアクセスする必要があるため、VPS を取得する必要があります。

サーバーが再起動されるたびに PHP スクリプトを自動的に開始するファイルをサーバー上にセットアップする必要があります。通常、これは PHP スクリプトを実行するシェル スクリプトを /etc/init.d に配置し、そのシェル スクリプトへのシンボリック リンクを /etc/rc5.d に配置することによって行われます (これがデフォルト レベルであると仮定します)。

また、このサーバーをファイル サーバーとして使用する予定がない限り、Apache を実行したくない、または実行する必要がない可能性が高いでしょう。ソケット サーバーとしてのみ使用している場合は、PHP-CLI をインストールすることをお勧めします。これにより、メモリが節約されます。

サーバーに接続しているユーザー間でリアルタイムのやり取りをしようとしている場合は、データベースをまったく関与させたくない場合があります。ソケット サーバーには、ソケット サーバーに接続されているすべてのサブスクライバーのリストが含まれているため、そのうちの 1 つがメッセージを送信すると、低速のデータベースに何も保存することなく、接続されているすべてのサブスクライバーにそのメッセージをすぐに送信できます。または、余裕がある場合は、情報をメモリに保持することをお勧めします。

socket.io と呼ばれるすべてのブラウザーでサポートされていないソケットの解決策があります。基本的に、サポートされている場合はブラウザーの Websocket をセットアップしようとするが、サポートされていない場合は Flash ソケット接続を開始すると思います。どちらの方法でも、同じインターフェイスを使用して操作します。

また、ソケット サーバーを作成するために別の言語を検討することもできます。PHP は、この種のことのために構築されているわけではありません。特にスケーラビリティが懸念される場合は、Javascript を使用することをお勧めします。Node.js は、ソケット サーバーを非常に簡単に構築できるライブラリであり、はるかにスケーラブルです。

于 2012-03-16T15:44:18.503 に答える