2011-09-18 25 views
6

No soy muy experto en PHP. Quiero saber cómo comunicarme entre 2 servidores web. Para la autorización, (desde el 1er servidor) ejecuta una función (consulta) en el servidor remoto. Y devuelve el resultado al primer servidor.PHP: Función remota ¿Llamar y devolver el resultado?

En realidad, el tema será:
Web Server (1) ---------------->Web Server (2) --------------->Database Server
Web Server (1) < ---------------- Web Server (2) < --------------- Database Server

Query Function() se encuentra solamente en Web Server (2). Entonces necesito ejecutar ese query function() de forma remota desde Web Server (1).

¿Cómo se llama? Y es posible?

+0

¿Has echado un vistazo a [estas preguntas] (http://stackoverflow.com/search?q=php+rpc)? –

+0

RPC? ¿Este caso es sobre RPC, quieres decir? –

+1

RPC significa * Llamada a procedimiento remoto * y parece ser lo que desea hacer. Es un protocolo general (o concepto). Las variaciones son RMI (Java), XML-RPC, JSON-RPC ... hay mucho para elegir. Incluso puedes crear el tuyo propio. Pero eso no significa que esta sea la mejor manera en su situación. [Tal vez REST sería mejor] (http://stackoverflow.com/questions/1098473/rest-vs-rpc). –

Respuesta

11

Sí.

Una buena manera que se me ocurre es enviar una solicitud al segundo servidor a través de una URL. En los parámetros GET (o POST), especifique a qué método le gustaría llamar y (por seguridad) algún tipo de hash que cambie con el tiempo. El hash allí para garantizar que ningún tercero pueda ejecutar la función arbitrariamente en el segundo servidor.

para enviar la solicitud, se puede usar cURL:

function get_url($request_url) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $request_url); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $response = curl_exec($ch); 
    curl_close($ch); 

    return $response; 
} 

Esto envía una petición GET. A continuación, puede utilizar:

$request_url = 'http://second-server-address/listening_page.php?function=somefunction&securityhash=HASH'; 
$response = get_url($request_url); 

En su segundo servidor, configurar el listening_page.php (con cualquier nombre de archivo que desee, por supuesto) que los controles de peticiones GET y verifica la integridad de la solicitud (es decir, el hachís, correcta & parámetros válidos).

+0

¡Woah! ¿Esto se puede hacer así de simple? Entonces, ¿puedo hacer cualquier llamada a la función() directamente y obtener el retorno, tan simple como en la misma función local ...? –

+0

Sí. Sin embargo, tendrá que 'exponer' las funciones a las que quiere que se llame. (es decir, el servidor 2 obtiene la solicitud GET, luego * it * ejecuta la función solicitada, luego pasa la respuesta al servidor 1, por lo que el servidor 1 no está llamando * directamente * a la función remota, pero tiene un efecto similar). – Alex

+0

He probado y funciona amigo: D Tan simple. ¿Es la solución correcta de estos? Quiero decir, otros dicen que utilicen REST API, SOAP, etc. Por qué por favor ... –

0

Puede hacerlo mediante el uso de una API. crea una página en el segundo servidor que toma variables y se comunica con el servidor usando esos vars (dependiendo de lo que necesites). y la respuesta estándar de esa página debe ser JSON o XML. luego lea eso desde el servidor 1 solicitando ese archivo y obteniendo la respuesta del segundo servidor.

* NOTA si es un archivo privado, asegúrese de que utiliza un método de autenticación para evitar que los usuarios accedan al archivo

+0

¿Estás hablando de una API REST? –

+0

sí, pero depende del usuario, la API REST es buena, pero si prefiere, por supuesto puede usar texto sin formato como respuesta. – ahoura

+0

Amigos disculpen por interrumpir sus charlas. Pero, como soy nuevo con PHP, ¿puede PHP recibir directamente un resultado JSON o XML? Quiero decir, los resultados JSON o AJAX vuelven a Javascript e imprimen sobre elementos HTML. (Por lo que sé muy poco sobre eso.) –

0

Lo que pretenden hacer es definitivamente posible. Tendrá que establecer algún tipo de API para que un servidor para hacer una petición al servidor 2.

le sugiero que lea sobre SOAP y REST API

http://www.netmagazine.com/tutorials/make-your-own-soap-api

general que va a utilizar algo así como CURL para ponerse en contacto con el servidor 2 desde el servidor 1.

Google curl y usted debe hacerse una idea rápidamente.

No será fácil darle una solución completa, así que espero que este empujón en la dirección correcta sea útil.

+0

Gracias por su sugerencia de usar SOAP y API REST. Pero, la manera de Alex es simple y ¿Por favor, puede explicar cómo es diferente entre su solución y las API de SOAP/REST? Gracias :) –

+0

usando un http get como se sugirió anteriormente es una solución perfectamente buena, pero construir una API en última instancia r mejor funcionalidad, seguridad, etc. Si solo está buscando resultados, es fácil y rápido usar un get. Si, por ejemplo, desea autenticar usuarios, publicar datos para insertarlos en un DB, etc., un get públicamente abierto probablemente no sea ideal. – arkleyjoe

Cuestiones relacionadas