Remote Object Proxy
The remote object implementation is a mechanism that enables an local object to control an other object on an other server. Each call method on the local object will do a network call to get information or execute operations on the remote object.
What is remote object proxy ?
A remote object is based on an interface. The remote interface defines the API that a consumer can call. This interface must be implemented both by the client and the RPC server.
Adapters
ZendFramework's RPC components (XmlRpc, JsonRpc & Soap) can be used easily with the remote object. You will need to require the one you need via composer, though:
$ php composer.phar require zendframework/zend-xmlrpc:2.* $ php composer.phar require zendframework/zend-json:2.* $ php composer.phar require zendframework/zend-soap:2.*
ProxyManager comes with 3 adapters:
ProxyManager\Factory\RemoteObject\Adapter\XmlRpc
ProxyManager\Factory\RemoteObject\Adapter\JsonRpc
ProxyManager\Factory\RemoteObject\Adapter\Soap
Usage examples
RPC server side code (xmlrpc.php
in your local webroot):
interface FooServiceInterface { public function foo(); } class Foo implements FooServiceInterface { /** * Foo function * @return string */ public function foo() { return 'bar remote'; } } $server = new Zend\XmlRpc\Server(); $server->setClass('Foo', 'FooServiceInterface'); // my FooServiceInterface implementation $server->handle();
Client side code (proxy) :
interface FooServiceInterface { public function foo(); } $factory = new \ProxyManager\Factory\RemoteObjectFactory( new \ProxyManager\Factory\RemoteObject\Adapter\XmlRpc( new \Zend\XmlRpc\Client('https://localhost/xmlrpc.php') ) ); $proxy = $factory->createProxy('FooServiceInterface'); var_dump($proxy->foo()); // "bar remote"
Implementing custom adapters
Your adapters must implement ProxyManager\Factory\RemoteObject\AdapterInterface
:
interface AdapterInterface { /** * Call remote object * * @param string $wrappedClass * @param string $method * @param array $params * * @return mixed */ public function call($wrappedClass, $method, array $params = array()); }
It is very easy to create your own implementation (for RESTful web services, for example). Simply pass your own adapter instance to your factory at construction time
Tuning performance for production