2009-09-23 14 views
8

Tengo un sitio web creado con PHP. Tengo una aplicación Erlang ejecutándose como daemon en el mismo servidor. Necesito llamar a funciones en la aplicación Erlang de PHP y recuperar el resultado.aplicación de interfaz erlang con php

Encontré PHP/Erlang y sobre módulos PHP pero no puedo instalar un módulo PHP en este servidor, solo puedo usar el código PHP.

La única manera que conozco para resolverlo es ejecutar localmente un servidor web Erlang con el que el PHP podrá hablar.

¿Hay una mejor manera de resolverlo? Si usar un servidor httpd es la mejor manera, ¿qué servidor Erlang debería usar? Debe ser lo más ligero posible y no necesita funciones como SSL y no necesita manejar una carga grande.

Gracias

Respuesta

-2

No creo que haya una mejor solución. Necesito el servidor web Erlang para ejecutarlo en la web. Aquí hay alguna información PHP + Erlang relacionado

http://yaws.hyber.org/cgi.yaws

+0

No necesito servir php usando el servidor erlang (pian). Sirvo mi php usando Apache pero quiero poder llamar a las funciones de Erlang desde los scripts php. –

2

Erlang es excelente en la toma de E/S: tal vez usted podría utilizar una tubería de algún tipo?

Esto sería más directo que a través de otra capa de servidor WEB seguro.

Uso de las funciones Erlang: open_port y Erlang: port_command funciones para obtener los datos de entrada/salida de Erlang través de un puerto del sistema.

+0

¿Puedes explicar a qué te refieres con "una pipa de algún tipo"? ¿Qué debo hacer en el lado de erlang y cómo lo llamo desde php? –

+0

Usted se escribe un gen_server en el lado de Erlang que abre un socket y en el lado de PHP también usa un socket (http://ca.php.net/sockets). En términos de formato de intercambio de datos, puede usar XML o JSON. – jldupont

+0

¿El socket será seguro para subprocesos, lo que significa que dos procesos de erlang pueden enviar mensajes al mismo socket que el gen_server está escuchando? El búfer del protocolo de Google está relacionado http://code.google.com/apis/protocolbuffers/docs/overview.html o es solo una forma más eficaz de pasar los datos. En mi caso, la simplicidad es mucho más importante que la eficiencia. gracias –

2

erl.erl $ cat

#!/usr/bin/env escript 

main(Args) -> 
    io:format("~p\n", [Args]), 
    io:format("~p\n", [(catch test(Args))]). 

test([N1,N2|_]) -> 
    lists:seq(list_to_integer(N1),list_to_integer(N2)). 

$ chmod + x erl.erl

php.php $ cat

?php 
var_dump(exec("./erl.erl 1 5")); 
?> 

$ php php.php

cadena (11) "[1,2,3,4,5]"

+0

debe usar http://php.net/proc_open en php y muy probablemente la comunicación con otro nodo erlang en erl.erl, pero creo que puede hacerlo usted mismo :) – JLarky

+0

Esto es mucho más lento ya que el escript debe compilarse cada hora. Además, un comando de shell debe generarse cada vez. – jldupont

+0

puede reemplazar escript por la aplicación compilada de erlang, simplemente "arl -run function function args". Y el programa se generará una vez por script php, no tanto. – JLarky

3

Me gustaría correr un w ebserver como mochiweb que aloja el código de erlang. El código PHP usaría curl para enviar consultas http codificadas en JSON a mochiweb. Mochiweb tiene un codificador/decodificador JSON y PHP tiene soporte JSON nativo.

Incluso si todo está en el mismo servidor, simplemente use HTTP. Maneja todas las cosas de bajo nivel y si necesita escalar, será más fácil, ya que escalar con HTTP es un problema resuelto. Mochiweb es ligero y tiene un alto rendimiento.

1

Eche un vistazo a erl_call. http://www.erlang.org/doc/man/erl_call.html

Es un programa unix que se utiliza para llamar a una función en erlang. Comenzará un nodo erl falso, ejecutará los comandos y devolverá el resultado. Puede usar PHP para llamar a erl_call y luego usar los resultados que devuelve.

Cuestiones relacionadas