3

いくつかのパブリック Java メソッドを定義する Red5 アプリケーションがあります。サーバーを起動すると、アプリケーション クラスのオブジェクトが作成されます。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")));

残念ながら、java_is_null()PHP の関数は を返しますtrue

また、 App オブジェクトを App クラスの静的変数に保存しようとしましたが、PHP でその変数にアクセスすると、その値はnull.

4

4 に答える 4

1

PHP クライアントから Red5 アプリに接続できるライブラリを見つけました。PHP/Java Bridge の代わりに使用しています。ここで見つけることができます: code.google.com/p/php-rtmp-client

于 2012-10-08T15:09:05.950 に答える
1

JavaBridege/java/Java.inc がどのように見えるかがわからないので、あなたの投稿はかなり不完全だと思います。

2 番目の疑問は、ここで何をしようとしているのかということです。PHP から Java 関数を呼び出したいですか? アプリケーションへの呼び出しをトリガーする単純なサーブレットを作成してみませんか。次に、サーブレットの URL にアクセスして、たとえば cURL 経由で呼び出しを実行できます。

Java 関数を "raw" で呼び出すことはまったく推奨されません。つまり、この関数は JVM にロードされるため、このコードまたはメソッドにアクセスするには、Java プログラムで API を提供する必要があります。この Java コードは Apache Tomcat にロードされ、Spring を介して Red5 フレームワークの一部としてロードされることに注意してください。つまり、単純な Java クラス以上のものです。ここで提案する方法で ApplicationAdapter にメソッドをトリガーすることはまったく可能であるとは思えません。

セバスチャン

于 2012-10-08T14:21:00.680 に答える
0

PHP Web サーバーが Java.inc をロードできないようです。

これらの手順に従って確認してください。

http://php-java-bridge.sourceforge.net/pjb/desktop-apps.php

于 2012-10-08T14:26:07.973 に答える