我有一个Red5应用程序,它定义了一些公共Java方法。当我启动服务器时,会创建应用程序类的对象。我试图使用现有的Java应用程序类实例从PHP调用应用程序类的公共方法。
所以这是我的Java应用程序:
public class App extends org.red5.server.adapter.ApplicationAdapter
{
public boolean appStart(IScope app)
{
// This method gets called when the application starts
// and an object of this App class is created.
return true;
}
// This is the method I would like to call from PHP.
public void f()
{
}
}
从PHP开始,我希望能够访问创建的App对象并在其上调用方法f()
。
我试过玩这个叫做“上下文”的东西。所以在Java方法App.appStart()
中,我这样做了:
// Save a reference to this App object to be retrieved later in PHP.
new PhpScriptContextFactory().getContext().put("x", this);
在PHP中,我试图像这样访问保存的对象:
require_once("http://localhost:5080/JavaBridge/java/Java.inc");
var_dump(java_is_null(java_context()->get("x")));
不幸的是,PHP中的java_is_null()
函数返回true
。
我还尝试将App对象保存在App类的静态变量中,但是当我在PHP中访问该变量时,其值为null
。
答案 0 :(得分:1)
我认为你的帖子相当不完整,因为我们看不到JavaBridege / java / Java.inc的样子。
第二个疑问是关于你在这里尝试做什么。你想从PHP调用Java函数?为什么不创建一个触发对Application的调用的简单Servlet。然后,您可以访问Servlet的URL并通过cURL执行调用。
根本不建议调用Java函数“raw”,我的意思是将此函数加载到JVM中,您应该在Java程序中提供API来访问此代码或方法。请记住,此Java代码已加载到Apache Tomcat中,并通过Spring作为Red5框架的一部分加载。所以它更像是一个简单的Java类。我怀疑是否可以按照你提出的方式在ApplicationAdapter中触发一个方法。
塞巴斯蒂安
答案 1 :(得分:1)
我遇到了一个允许您从PHP客户端连接到Red5应用程序的库。我现在使用它而不是PHP / Java Bridge。您可以在此处找到它:code.google.com/p/php-rtmp-client。
答案 2 :(得分:0)
我认为您的PHP Web服务器无法加载Java.inc。
请按照以下步骤检查,它对我有用
答案 3 :(得分:0)
很少有技术可以帮助您 php / Java桥, 肥皂, Zend的供应商特定框架或Caucho的J2EE应用服务器, IBM的Eclipse零框架
我推荐php / java bridge。