2012-08-15 11 views
5

Estoy trabajando en un proyecto de energía. En mi sitio existen servicios de energía de mayo registrados con el proceso de inscripción a través de servicios web. Inicialmente era 1 para comenzar, ahora vinieron 3 más para integrarse.PHP ¿Cómo implementar múltiples servicios web de forma simultánea?

En la primera página tengo que mostrar los planes basados ​​en los códigos postales. Ahora, en esta página, debo solicitar a los 4 proveedores de energía que enumeren los planes de energía.

Para solicitar cada servicio a la vez de forma secuencial definitivamente tomará más tiempo ya que tengo que obtener los datos de una fuente externa y esta es la primera página, así que no quiero que sea más lenta al principio solo instancia.

¿Cómo puedo solicitar a todos los servicios simultáneamente y recopilar los datos de cada servicio y ponerlos en la última página?

+0

Sé que muchos se quejarán, pero ¿has pensado en el multi-threading? Desde los primeros resultados de Google, estos parecen buenos lugares para comenzar ... http://villavu.com/forum/showthread.php?t=73623 y http://blog.motane.lu/2009/01/02/multithreading-in-php/support parece delgado, pero esto puede acelerar las cosas al hacer que las 4 solicitudes vayan en "una vez", eso es lo que me imagino al menos ... – blad

+1

¿Qué pasa con el almacenamiento en caché? ¿Con qué frecuencia cambian estos planes? ¿Tiene que ser en tiempo real? ¿Por qué no tener un trabajo cron que sondea todos los servicios cada 1-5 minutos y almacena los resultados en memcache o en una tabla MySQL HEAP? Entonces su front-end podría leer desde la memoria caché en lugar de los servicios web. – Costa

+0

@Costa suena como una buena solución. Pero el problema es que aún no sé cuántos códigos postales tienen y con qué frecuencia cambian el plan. Podría haber alrededor de 50K códigos postales. Pero lo tendré en cuenta e implementaré donde sea factible. – Vins

Respuesta

3

En realidad, solo hay una forma no desagradable de hacer esto con PHP al ejecutar en un servidor web. Necesitará el módulo cURL compilado en PHP. Tiene soporte integrado para ejecutar solicitudes paralelas. Mira los comentarios y documentación en www.php.net para ejemplos de uso.

Probar: http://www.php.net/manual/en/function.curl-multi-init.php

Otras opciones, como procesos de fondo que se bifurcan o llamar a un shell de UNIX, son terribles para mantener y rara vez multiplataforma. El multihilo no es una opción válida en casi cualquier entorno PHP común.

Debo mencionar, aunque no necesariamente sugerir, que se podría utilizar un enfoque AJAX. No es tan liviano en todos los casos, pero debe pesarse.

+0

Al tratar con una situación similar lo resolví descargando el trabajo para recuperar los datos en un shell de torta, que utilizaba pcntl_fork para ejecutar solicitudes simultáneas de servicios web. Los procesos secundarios almacenaron las respuestas en la memoria compartida, y cuando se realizaron todos los procesos, el proceso del shell primario los recopila y los envía de vuelta a la webrequest. Me funcionó para disminuir los tiempos de carga en grandes cantidades. Pero tenga en cuenta lo que dijo Pestilence sobre esta solución. – Ceeram

+0

@pestilence ¿Qué pasa si estoy utilizando diferentes solicitudes diferentes para llamar a servicios web? uno usando REST secong usando SOAP tercero usando Curl .. En ese momento Cómo ayudará ... gracias –

Cuestiones relacionadas