+ -
当前位置:首页 → 问答吧 → quercus:一个纯java实现的php引擎使用手记

quercus:一个纯java实现的php引擎使用手记

时间:2011-10-25

来源:互联网

创业公司参与项目的人口众多、背景不一,目前市场上的主流方向为php与java,很多时候java工程师恨铁不成钢,php工程师也无可奈何。于是便有了此文,讲述如何使用quercus创建php java混合型项目。

quercus是什么?
quercus是Caucho公司针对php语言的java实现,100%完成了php5的解析。是resin内建支持的功能。同时,因为使用了 resin,使得php可以很容易得到连接池、分布式session、负载均衡等功能。使用resin的php项目可以更加安全,不存在很多 fastcgi的问题。

性能如何?
官方:用mediawiki与drupal来做实验,要比mod_php快4倍。
有一个编译选项,在resin专业版里支持,可以把php转成java class,得到更高性能。

新建一个java项目混合php项目
web.xml是关键,里面声明了*.php文件的访问都以com.caucho.quercus.servlet.QuercusServlet来执行。

   1. <?xml version="1.0" encoding="UTF-8"?>  
   2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
   3.     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
   4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
   5.     id="WebApp_ID" version="2.5">  
   6.     <display-name>testquercus</display-name>  
   7.     <welcome-file-list>  
   8.         <welcome-file>index.html</welcome-file>  
   9.         <welcome-file>index.php</welcome-file>  
  10.     </welcome-file-list>  
  11.     <servlet>  
  12.         <servlet-name>Quercus Servlet</servlet-name>  
  13.         <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>   
  14.     </servlet>  
  15.     <servlet-mapping>  
  16.         <servlet-name>Quercus Servlet</servlet-name>  
  17.         <url-pattern>*.php</url-pattern>  
  18.     </servlet-mapping>   
  19. </web-app>  

所有的php文件放在webapp下,所有的java文件还放到java目录里。

如何混合java到php中?
在java目录新建类Test54Chen,生成后位置:
WEB-INF/classes/com/chen/FrameWork.class

   1. /**
   2.  * @author 54chen(陈臻) [[email protected] [email protected]]
   3.  * @since 2011-10-25 下午 08:40:49
   4.  */  
   5. package com.chen;  
   6.   
   7. public class FrameWork {  
   8.     public String go(String who) {  
   9.         return who + " gogogo!";  
  10.     }  
  11. }  

在webapp新建php文件:
test.php

   1. <?php  
   2. import com.chen.FrameWork;  
   3. $f = new FrameWork();  
   4. var_dump($f->go("ohohoh"));  
   5. ?>  

配置到resin中:
目标文件夹指到webapp。

访问:test.php

截图:
1.整个项目的情况
quercus
2.访问的结果
quercus php java
下一记:如何利用java做连接池提供给php使用。

作者: cc0cc   发布时间: 2011-10-25

确实php和java结合会带来很多诱人的东西,优势互补

作者: 夢諾雨蓒   发布时间: 2011-10-25

这个只会在个别场合快过Zend引擎,综合性能方面是绝对不可能快过原生引擎的,并且很可能无法使用php的扩展。

作者: bs   发布时间: 2011-10-25

这个我本来想用,结果发现问题一大堆。
实验还行,产品还不行。

作者: beimuaihui   发布时间: 2011-10-26

有在生产环境中的使用实例吗?

作者: lovehaw   发布时间: 2011-11-01

应该还是不错的,如果PHP要使用PHP扩展 其实那些Java实现的扩展可靠性比PHP更高,因为PHP是若类型的。

作者: zhidc   发布时间: 2012-08-03

行行出牛人啊,

作者: 新悦5   发布时间: 2012-08-04

学习

作者: houhuiyang   发布时间: 2012-08-06

学习了

作者: xiaozhihui   发布时间: 2012-09-16

用mediawiki与drupal来做实验,要比mod_php快4倍。?

有人验证过这个么?

作者: bigrabbit   发布时间: 2012-09-17

bigrabbit 发表于 2012-9-17 11:01
用mediawiki与drupal来做实验,要比mod_php快4倍。?

有人验证过这个么?

是要快。
但是PHP加了opcode缓存,跑在nginx下,这个就不如了。

作者: iminto   发布时间: 2012-09-17