2012-05-02 38 views
0

私はphpwebsocketアプリケーションを開発中です。私はphpwebsocketのインスタンスをアプリケーションのどこに格納する必要があります。私は解決策を見つけました。その解決策はAPCのものです。そして、それは動作しません。 問題は、PHPコンソールで実行するスクリプトphpからapc_store( 'foo'、 'bar')を使ってファイルにアクセスすると機能しないことです。私はHTTPリクエスト(ブラウザを使用して.. ..)実際には動作しますが、私は本当にphpwebsocketをPHPコンソールから実行する必要があります。 php.iniでAPCがPHPコンソールで動作しない

[APC] 
extension=php_apc.dll 
apc.enabled = 1 
apc.enable_cli = 1 
apc.shm_segments = 1 
apc.shm_size = 64M 
apc.max_file_size = 10M 
apc.stat = 1 

感謝。

答えて

0

APCは、プロセス空間内にキャッシュを収集して格納します。コンソールアプリケーションは毎回新しいプロセスを開始するので、APCキャッシュはクリーンで始まり、したがってパフォーマンスは向上しません。 Apache modの場合、プロセス空間はApache Webサーバー自体であり、それは生きています。

1)スタンドアロンのコンソールPHPスクリプトの代わりにコンソールでwget URLを実行するとどうなりますか?出力が必要な場合は、wget -O - URLを使用してください。 APCはうまく動作します。ここでの制限は、スクリプトが物理的なファイルアクセスを取得しないことです。

2)コンソールのPHPコンソールスクリプトからfile_get_contents(URL)を実行し、その内容をダンプできます。そうすれば、コンソールから呼び出すこともできますし、APCキャッシュを共有することもできます。ここで物理的なファイルへのアクセスもありますが、問題が1つあります。重大なセキュリティ上の理由から、デフォルトではファイルとしてのURL取得はオフになっています。 php.iniでONにする必要があるかもしれません。運用ネットワークで使用する前に、慎重にケースを検証してください。

http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

+0

それは素晴らしいです。私は、ファイルの間にオブジェクトのインスタントを保持する方法が必要でした。だから、私はAPCが最善の解決策であると判断しました。実際には、オブジェクトのインスタンスをインスタンス化するためにコンソールを必要とするわけではありません。ありがとう! – ioanb7

0

php-cliは、php-cgiまたはphp-fpmとAPCキャッシュを共有しません。実際には、APCキャッシュを共有しているかどうかはわかりません。

さらに、ストリームやソケットなどのリソース/インスタンスは、APC専用のシリアル化されたオブジェクトに格納することはできません。

私はhttp://memcached.org/を使用してデータをキャッシュします。それ以来、さらにサーバーを追加すると、同じキャッシュにアクセスすることもできます。 APC/XCacheは単一のサーバー上でのみ動作します。

+0

私は他のスクリプトを経由して私のクライアントにデータを送信するオブジェクトへの参照を必要とします。すべてのスクリプトはクライアントとのコミュニケーションが必要なので、スクリプトはwebsocket経由で送ることができます。あなたは私の問題を理解していますか?編集:memcachedは私が必要なものは遠いと思う。 – ioanb7

関連する問題