使用php连接erlang应用程序

时间:2009-09-23 01:12:54

标签: php erlang marshalling

我有一个用PHP构建的网站。 我有一个Erlang应用程序作为守护程序在同一台服务器上运行。 我需要从PHP调用Erlang应用程序上的函数并返回结果。

我发现PHP / Erlang和PHP模块,但我无法在此服务器上安装PHP模块,我只能使用PHP代码。

我知道解决问题的唯一方法是在本地运行一个PHP能够与之交谈的Erlang Web服务器。

有没有更好的方法来解决它? 如果使用httpd服务器是最好的方法,我应该使用什么Erlang服务器? 它应该尽可能轻,不需要SSL之类的功能,也不需要处理大负载。

由于

5 个答案:

答案 0 :(得分:3)

我会运行一个托管erlang代码的mochiweb等网络服务器。 PHP代码将使用curl将以JSON编码的http查询发送到mochiweb。 Mochiweb有一个JSON编码器/解码器,PHP有本机JSON支持。

即使每件东西都在同一台服务器上,也只需使用HTTP。处理所有低级别的东西,如果你需要扩展,它将更容易,因为使用HTTP扩展是一个已解决的问题。 Mochiweb重量轻,性能高。

答案 1 :(得分:2)

Erlang在socket I / O方面非常出色:也许你可以使用某种管道?

这肯定比通过另一个WEB服务器层更直接。

使用函数 erlang:open_port erlang:port_command 函数通过系统端口获取/退出Erlang数据。

答案 2 :(得分:2)

$ cat erl.erl

#!/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

$ cat php.php

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

$ php php.php

string(11)“[1,2,3,4,5]”

答案 3 :(得分:1)

看看erl_callhttp://www.erlang.org/doc/man/erl_call.html

这是一个unix程序,用于调用erlang中的函数。它将启动一个虚拟erl节点,执行命令并返回结果。您可以使用PHP调用erl_call,然后使用它返回的结果。

答案 4 :(得分:-2)

我认为没有更好的解决方案。 我需要Erlang网络服务器在网上运行它。 这里有一些与PHP + Erlang相关的信息

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