现在的位置: 首页 > 综合 > 正文

连接PHP和 Java — PHP/Java Bridge [1]

2013年02月21日 ⁄ 综合 ⁄ 共 1957字 ⁄ 字号 评论关闭

Haohappy
PHP5研究中心:http://blog.csdn.net/haohappy2004


WEB开发市场中,JavaPHP都是目前应用的热门技术。Java的强大是不容置疑的,不仅体现在WEB开发上,在各个软件应用领域,Java无所不在。而PHP在开源力量及ZEND,IBM,Oracle等公司的推动之下也日渐繁荣。不一定会有人相信互联网先锋人物Marc Andreessen 的预言“PHP将比Java更受欢迎”,但是“PHP瞄准企业市场,和Java展开正面较量”确实正在进行中,全球2200万个网站所采用的技术让人不得不重视


两种技术可以激烈竞争,也可以紧密合作。从客户的角度来说,技术之间的融合非常重要,因为一个庞大的应用系统,通常不可能由单一语言/和技术独立完成。PHP/Java Bridge的出现就将成为PHPJava间的一道桥梁,为需要结合PHPJava的企业提供一个良好的选择。


//HaohappyJ2EE了解不深,如果有相关内容理解错误,欢迎批评指教。


(一)什么是JSR,什么是JSR223


JSR(Java 规范请求)是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR(Java 规范请求),以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。


Java Servlet规范(Servlet 2.4,JSR-154)中,定义了一系列核心的抽象概念(WEB程序处理过程中需要考虑的各种对象)来让Java程序员编写WEB程序,包括session,request,response等等。当程序员在编写程序的时候,可以很方便安全地与这些对象进行通讯。JSR223描述的是这些Java对象如何向用其它脚本语言编写的WEB页面开放,使其它语言也可以访问这些对象。当前这个规范将被用于PHP,不过这种概念是独立于脚本语言的,也就是说在将来可能被应用于PHP之外的其它脚本语言。一句话,JSR223目的是将脚本语言集成到Java平台之上。


() 什么是PHP/Java Bridge ?


PHP/Java Bridge包含一个PHP模块(包括java.so,php_java.dll)和一个相关的后端程序(JavaBridge.jar,JavaBridge.warMonoBridge.exe),用于连接PHP的对象体系到JavaECMA 335(CLI, Microsoft .NET Framework的重要子集)虚拟机。 它完全实现了JSR 223规范请求,可以使PHP脚本访问基于CLR(VB.NETC#)Java(Java,KAWA,JRuby)的应用程序。PHP/Java Bridge通过本地socket用一个高效的通讯协议与虚拟机进行通讯。一个多进程的HTTP服务器的每个处理请求的PHP进程都会有一个相应的虚拟机线程。


多个HTTP服务器的请求会被集中发送到一个运行着PHP/Java Bridge的应用服务器,或者每个HTTP服务器都有一个PHP/Java Bridge并和一个J2EE应用服务器进行通讯,必需的客户端类库(ejb client.jar)将在运行时被加载。


如果在ECMA虚拟机内至少有一个后端程序在运行,例如NovellMONOMicrosoft .NET,那么基于ECMA 335的类就可以被访问,也可以支持varargs, reflectionassembly loading等特性。


如果在J2EE环境中有一个后端程序运行,PHPJSP间就可以实现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包。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=621807

抱歉!评论已关闭.