2010-07-02 9 views
0

PHP 응용 프로그램의 백 엔드로 작동하는 큰 (ish) COM 개체가 있습니다. 페이지를 새로 고칠 때마다 PHP는 COM 인터페이스의 새로운 객체를 만듭니다. 그러나 이것은 느립니다.PHP에서 COM 객체를 캐시/직렬화 할 수 있습니까?

이미 초기화 된 개체에 액세스 할 수 있도록 COM 개체를 serialize/캐시 할 수있는 방법이 있습니까? 아니면 다른 해결 방법이있을 수 있습니다. 또한 어느 개체가 어떤 세션에 속해 있는지에 대한 제어권을 갖고 싶습니다.

PHP를 사용하는 경우에도 가능합니까? 나는 이것을 작동시키기 위해 또 다른 언어로 전환 할 준비가되어있다.

답변

3

이것이 가능한지는 의심 스럽습니다. COM 개체는 본질적으로 직렬화 할 수없는 연결 리소스와 유사합니다.

마음에 떠오르는 유일한 생각은 PHP 프로세스를 지속적으로 실행하고, COM 객체를 초기화하고, 다른 PHP 프로세스와 통신하는 것입니다. memcache을 사용하십시오. PHP는 오래 지속되는 작업을 위해 구축 된 것이 아닙니다. 제대로 작동하는지 확실하지 않습니다. PHP Daemon/worker environment

그리고 백그라운드 프로세스로 PHP를 사용하는 방법에 대해 : 여기

내가 우연히 흥미로운 질문이다 Is it wise to use PHP for a daemon?

가장 매력적인 방법은 COM을로드하는 다른 언어로 데몬을 구축 할 수 있습니다 객체를 제공하고 소켓을 통해 PHP 프로세스에 서비스를 제공합니다.

0

아니요 - com 객체가 PHP 메모리 공간 밖에 존재합니다. PHP 내부의 PHP 장식 객체 일뿐입니다.

c

0

asier 솔루션은 COM 프록시 일 수 있습니다. COM 프록시 서버는 PHP 응용 프로그램과 동일한 COM 인터페이스를 노출합니다. 각 프록시 개체는 기본 COM 개체로 투명하게 리디렉션됩니다. 프록시의 핵심은 무거운 COM 개체를 풀의 캐시/캐시에 다시 놓는 것이므로 나중에 새로운 프록시를 만드는 대신 해당 풀에서 COM 개체를 재활용하여 새로운 프록시를 신속하게 만들 수 있습니다.

+0

이것은 내가 생각하고있는 것입니다. 어떻게 구현 될까요? –

+0

답변 해 주셔서 감사합니다. 이런 식으로하는 방법에 대한 예제 또는 자습서를 알고 있습니까? – Tom

+0

각'CProxyComClass'는'COriginalComClass'에 대한 포인터를 가지고 있습니다. 클래스에는'정적'풀이 있습니다. 'CProxyComClass'에 구현 한'COriginalComClass'에 의해 구현 된 모든 인터페이스'IFoo'. 'CProxyComClass :: Bar'의 모든 메소드는'IUnknown' 메소드를 제외하고는'COriginalComClass'에 전달됩니다. 'CProxyComClass :: QueryInterface'는 물론'CProxyComClass'의 인터페이스를 반환해야합니다. 'CProxyComClass :: Release'는 추가 된 값입니다 :'COriginalComClass *'를 풀에 반환합니다. 클래스 팩토리는 풀을 관리하고 풀링 된'COriginalComClass'에서'CProxyComClass'를 생성해야합니다. – MSalters

관련 문제