我有一个用PHP构建的网站。 我有一个Erlang应用程序作为守护程序在同一台服务器上运行。 我需要从PHP调用Erlang应用程序上的函数并返回结果。
我发现PHP / Erlang和PHP模块,但我无法在此服务器上安装PHP模块,我只能使用PHP代码。
我知道解决问题的唯一方法是在本地运行一个PHP能够与之交谈的Erlang Web服务器。
有没有更好的方法来解决它? 如果使用httpd服务器是最好的方法,我应该使用什么Erlang服务器? 它应该尽可能轻,不需要SSL之类的功能,也不需要处理大负载。
由于
答案 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_call
。 http://www.erlang.org/doc/man/erl_call.html
这是一个unix程序,用于调用erlang中的函数。它将启动一个虚拟erl节点,执行命令并返回结果。您可以使用PHP调用erl_call,然后使用它返回的结果。
答案 4 :(得分:-2)
我认为没有更好的解决方案。 我需要Erlang网络服务器在网上运行它。 这里有一些与PHP + Erlang相关的信息