9
votes

Application d'Erlang Interfaçage avec PHP

J'ai un site Web construit avec PHP. J'ai une application Erlang en fonction d'un démon sur le même serveur. Je dois appeler des fonctions sur l'application Erlang à partir de PHP et récupérer le résultat.

J'ai trouvé des modules PHP / Erlang et sur PHP, mais je ne peux pas installer de module PHP sur ce serveur, je ne peux utiliser que le code PHP.

La seule façon dont je sais résoudre est exécuté un serveur Web Erlang localement que le PHP sera capable de parler.

Y a-t-il une meilleure façon de le résoudre? Si vous utilisez un serveur HTTPD est le meilleur moyen, quel serveur Erlang dois-je utiliser? Il devrait être aussi léger que possible et n'a pas besoin de fonctionnalités telles que SSL et n'a pas besoin de gérer une charge importante.

merci


0 commentaires

5 Réponses :


-2
votes

Je ne pense pas qu'il y ait une meilleure solution. J'ai besoin d'Erlang WebServer pour l'exécuter sur le Web. Voici quelques informations PHP + Erlang liée

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


1 commentaires

Je n'ai pas besoin de servir PHP en utilisant Erlang Server (YAWS). Je serve mon PHP en utilisant Apache, mais je souhaite pouvoir appeler des fonctions erlang à partir de scripts PHP.



3
votes

Erlang est excellent chez Socket E / S: Peut-être que vous pourriez peut-être utiliser un tuyau d'une sorte?

Ceci serait plus direct que par une autre couche de serveur Web à coup sûr.

Utilisez les fonctions Erlang: Open_Port et Erlang: Port_Command Fonctions pour obtenir des données dans / hors erlang via un port système.


4 commentaires

Pouvez-vous expliquer que voulez-vous dire par «un tuyau d'une sorte»? Que dois-je faire sur le côté Erlang et comment puis-je l'appeler de PHP?


Vous vous écrivez un environnement Gen_Server sur le côté Erlang qui ouvre une prise et sur le côté PHP que vous utilisez également une prise ( ca. php.net/sockets ). En termes de format d'échange de données, vous pouvez utiliser XML ou JSON.


Le socket sera-t-il sécurisé en sécurité, ce qui signifie que deux processus Erlang peuvent envoyer des messages à la même socket que Gen_Server écoute? Est le tampon de protocole Google associé code.google.com/apis/protocolbuffer/docs/ Vue d'ensemble.html ou est-ce juste un moyen plus efficace de transmettre les données. Dans ma cas, la simplicité est beaucoup plus importante que l'efficacité. Merci


(Avez-vous envisagé d'entrer dans des questions distinctes?) - Erlang est très sûr du fil; En fait, il excelle au filetage. - Tampons de Google Protocoles: Je ne sais pas assez pour dire quelque chose d'intelligent à ce sujet.



2
votes

$ cat erl.erl xxx

chmod + x erl.erl

$ chat php.php xxx

PHP PHP.PHP

chaîne (11) "[1,2,3,4,5]"


4 commentaires

Vous devez utiliser php.net/proc_open en PHP et la communication la plus probable avec un autre nœud Erlang dans erl.erl mais je Pensez que vous pouvez le faire par vous-même :)


Ceci est beaucoup plus lent que la création doit être compilée à chaque fois. En outre, une commande shell doit être engendrée à chaque fois.


Vous pouvez remplacer EScript par l'application Erlang compilée, juste "ERL -R -Run Module Fonction Args". Et le programme sera généré une fois par script PHP, pas tellement.


C'est plutôt une preuve de concept que la solution de production. Pour la production, je pense qu'une interface peut être utilisée comme DBus ou Zeromq ( Zeromq.org/bindingsHerlang et zeromq.org/bindings:php )



3
votes

J'exécuterais un serveur Web tel que Mochiweb hébergeant le code Erlang. Le code PHP utiliserait CURL pour envoyer des requêtes HTTP codées dans JSON à Mochiweb. Mochiweb a un codeur / décodeur JSON et PHP possède un support JSON natif.

Même si tout est sur le même serveur, utilisez simplement http. Gère toutes les trucs de niveau bas et si vous avez besoin d'échelle, ce sera plus facile, car la mise à l'échelle avec HTTP est un problème résolu. Mochiweb est léger et a des performances élevées.


0 commentaires