2012-05-02 84 views
0

我正在開發一個phpwebsocket應用程序。我必須將phpwebsocket的實例存儲在我的應用程序的每個位置。我找到了一個解決方案,與APC合作。它不起作用。 問題是,如果我使用php控制檯上運行的腳本php訪問apc_store('foo','bar')文件,它將無法工作。如果我做了一個http請求(使用瀏覽器..)它實際上工作,但我真的不得不從PHP控制檯運行phpwebsocket。APC不能在php控制檯工作

在php.ini:

[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)如何在控制檯上執行wget URL而不是獨立的控制檯php腳本?如果您需要輸出,請使用wget -O - URL。 APC將工作得很好。這裏的限制是腳本不能獲得任何物理文件訪問權限。

2)你可以在你的控制檯php控制檯腳本中做一個file_get_contents(URL)並轉儲內容。這樣,您可以從控制檯調用它,甚至具有共享APC緩存的優勢。您也可以在這裏獲得物理文件訪問權限,但有一個問題。由於嚴重的安全原因,默認情況下由於文件處於OFF狀態而導致URL抓取您可能需要在php.ini中打開它。在生產網絡上使用它之前,請仔細覈實您的案例。

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

+0

太棒了。我需要一種方法來在文件之間保留一個對象的實例。所以我決定APC是最好的解決方案,但它不是因爲我需要控制檯來實例化對象的實例。謝謝! – ioanb7

0

php-cli不與php-cgiphp-fpm共享APC緩存。事實上,我不確定它甚至與自己共享APC緩存!

此外,您不能在APC內存儲類似於流或套接字的資源/實例 - 只有序列化對象。

我會使用http://memcached.org/來緩存數據,從那時起,當您添加更多的服務器時,他們也將能夠訪問相同的緩存。 APC/XCache只能在一臺服務器上運行。

+0

我需要的是通過其他的腳本將數據發送到我的客戶對象的引用。每個腳本都需要一種與客戶通信的方式,所以腳本可以通過websocket發送。你明白我的問題嗎?編輯:我認爲memcached是遠離我需要的。 – ioanb7