2012-05-02 3 views
0

phpwebsocket 응용 프로그램을 작성 중입니다. 나는 phpwebsocket의 모든 인스턴스를 애플 리케이션에 저장해야한다. 나는 해결책을 찾았는데, 그 해결책은 APC와 함께하는 것이었다. 그리고 그것은 작동하지 않습니다. 문제는 PHP 콘솔에서 실행되는 스크립트 PHP에서 apc_store ('foo', 'bar')로 파일에 액세스하면 작동하지 않는다는 것입니다. 브라우저 (..)를 사용하여 http 요청을하면 실제로 작동하지만 PHP 콘솔에서 phpwebsocket을 실행해야합니다. 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 캐시가 깨끗해지기 때문에 성능이 향상되지 않습니다. 아파치 모드의 경우, 프로세스 공간은 살아있는 아파치 웹 서버 자체입니다.

1) 콘솔에서 독립 실행 형 콘솔 PHP 스크립트 대신 wget URL을 수행하는 방법은 무엇입니까? 출력이 필요한 경우 wget -O - URL을 사용하십시오. APC는 정상적으로 작동합니다. 여기서 제한 사항은 스크립트가 실제 파일 액세스를 얻지 못한다는 것입니다.

2) 콘솔 PHP 콘솔 스크립트에서 file_get_contents (URL)를 수행하고 내용을 덤프 할 수 있습니다. 그렇게하면 콘솔에서 호출 할 수 있으며 공유 된 APC 캐시의 장점도 있습니다. 여기에도 실제 파일 액세스 권한이 있지만 한 가지 문제가 있습니다. 심각한 보안상의 이유로 기본적으로 파일을 가져 오는 동안 URL 페치가 해제됩니다. php.ini에서 이것을 켜야 할 수도 있습니다. 프로덕션 네트워크에서 사용하기 전에 신중하게 케이스를 검증하십시오.

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

+0

정말 대단합니다. 나는 파일들 사이에 객체의 instante를 유지할 방법이 필요했다. 그래서 APC가 최상의 솔루션이라고 결론을 내 렸습니다. 오브젝트의 인스턴스를 인스턴스화하기 위해 콘솔이 필요하지 않기 때문에 실제로는 아닙니다. 감사! – ioanb7

0

php-cliphp-cgi 또는 php-fpm과 APC 캐시를 공유하지 않습니다. 사실, APC 캐시를 공유하는지도 모르겠습니다.

또한 스트림이나 소켓과 같은 리소스/인스턴스를 APC 전용 직렬화 된 개체에 저장할 수 없습니다.

이후로 서버를 추가 할 때 http://memcached.org/을 사용하여 데이터를 캐시하면 동일한 캐시에 액세스 할 수 있습니다. APC/XCache는 단일 서버에서만 작동합니다.

+0

나는 다른 스크립트를 통해 내 클라이언트에 데이터를 전송 객체에 대한 참조가 필요합니다. 모든 스크립트는 클라이언트와 통신 할 수있는 방법이 필요하므로 스크립트는 websocket을 통해 보낼 수 있습니다. 내 문제를 이해하니? 편집 : 나는 memcached 내가 멀리 필요한 것 같아요. – ioanb7

관련 문제