将erlang应用程序与php接口

将erlang应用程序与php接口,php,erlang,marshalling,Php,Erlang,Marshalling,我有一个用PHP构建的网站。 我有一个Erlang应用程序作为守护进程在同一台服务器上运行。 我需要从PHP调用Erlang应用程序上的函数并返回结果 我已经找到了PHP/Erlang和其他PHP模块,但是我不能在这个服务器上安装PHP模块,我只能使用PHP代码 我知道解决这个问题的唯一方法是在本地运行一个ErlangWeb服务器,PHP可以与之对话 有没有更好的办法解决这个问题? 如果使用httpd服务器是最好的方法,那么我应该使用哪种Erlang服务器? 它应该尽可能轻,不需要像SSL这样的

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

我已经找到了PHP/Erlang和其他PHP模块,但是我不能在这个服务器上安装PHP模块,我只能使用PHP代码

我知道解决这个问题的唯一方法是在本地运行一个ErlangWeb服务器,PHP可以与之对话

有没有更好的办法解决这个问题? 如果使用httpd服务器是最好的方法,那么我应该使用哪种Erlang服务器? 它应该尽可能轻,不需要像SSL这样的特性,也不需要处理大负载


谢谢

我认为没有更好的解决办法了。 我需要ErlangWebServer在web上运行它。 下面是一些与PHP+Erlang相关的信息


Erlang在套接字I/O方面非常出色:也许您可以使用某种类型的管道

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

使用函数erlang:open_port和函数erlang:port_command通过系统端口进出erlang获取数据。

$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


字符串(11)“[1,2,3,4,5]”

我会运行一个Web服务器,比如托管erlang代码。PHP代码将用于将JSON编码的http查询发送到mochiweb。Mochiweb有一个JSON编码器/解码器,PHP有本机JSON支持


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

看看
erl\u call


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

我不需要使用erlang服务器(yaws)为PHP提供服务。我使用apache为我的php提供服务,但希望能够从php脚本调用erlang函数。你能解释一下“某种管道”是什么意思吗?在erlang端我需要做什么?如何从php调用它?在erlang端你自己编写一个gen_服务器,打开一个套接字,在php端你也使用一个套接字()。就数据交换格式而言,您可以使用XML或JSON。套接字是否是线程安全的,这意味着两个erlang进程可以向gen_服务器正在侦听的同一套接字发送消息?是google协议缓冲区相关,还是它只是传递数据的一种更有效的方式。在我看来,简单比效率重要得多。谢谢(您是否考虑过输入单独的问题?)-Erlang非常线程安全;事实上,它在线程方面表现出色Google Protocols Buffers:关于这些,我不知道该怎么说。您应该在php中使用,并且很可能在erl.erl中与其他erlang节点通信,但我认为您可以自己完成:)这要慢得多,因为每次都必须编译escript。此外,每次都必须生成一个shell命令。您可以用已编译的erlang应用程序替换escript,只需“erl-run module function args”。每个php脚本都会生成一个程序,但不会太多。这是概念证明,而不是产品解决方案。对于生产,我认为可以使用一些接口,比如dbus或zeroMQ(and)