什么是PHP/Java Bridge ?
PHP/Java Bridge包含一个PHP模块(包括java.so,php_java.dll)和一个相关的后端程序(JavaBridge.jar,JavaBridge.war或MonoBridge.exe),用于连接PHP的对象体系到Java或ECMA 335(CLI, Microsoft .NET Framework的重要子集)虚拟机。 它完全实现了JSR 223规范请求,可以使PHP脚本访问基于CLR(如VB.NET,C#)或Java(Java,KAWA,JRuby)的应用程序。PHP/Java Bridge通过本地socket用一个高效的通讯协议与虚拟机进行通讯。一个多进程的HTTP服务器的每个处理请求的PHP进程都会有一个相应的虚拟机进程。
多个HTTP服务器的请求会被集中发送到一个运行着PHP/Java Bridge的应用服务器,或者每个HTTP服务器都有一个PHP/Java Bridge并和一个J2EE应用服务器进行通讯,必需的客户端类库(ejb client.jar)将在运行时被加载。
如果在ECMA虚拟机内至少有一个后端程序在运行,例如Novell的MONO或Microsoft的 .NET,那么基于ECMA 335的类就可以被访问,也可以支持varargs, reflection,assembly loading等特性。
如果在J2EE环境中有一个后端程序运行,php和Jsp间就可以实现session共享,可以实现集群和负载平衡。
和以前的尝试 (ext/java 或 JSR223 的示例)不同,PHP/Java Bridge不再使用JNI(Java本地接口)。PHP对象将从HTTP(Apache/IIS)池而来,而Java/J2EE的对象从后端程序中分配而来。对象间通过“通讯传递样式(continuation passing style)”来进行通讯,见下面的java_closure()。一旦一个PHP对象崩溃,不会影响到Java应用服务器和servlet引擎。
从PHP/Java Bridge version 3.0开始,我们也可以把Java作为PHP脚本的一个运行环境。Java代码可以分配和调用PHP脚本,通过一个外部或内部的Java池。脚本对象可以来自于外部的HTTP池,或内部的php FastCGI池或直接使用php CGI。这个功能需要Java 6(预计2006年上半年推出) 或外部的javax.script包。
