验证两种各自领域称王的语言(JAVA /PHP),不同语言、不同机制的组合在一起,PHP负责WEB层,Java负责业务和数据逻辑层,真是一对黄金组合(Java+PHP整合=混血新宠儿),发挥各自优势,适合开发B/S企业程序。

1 技术问题

两种不同环境,不同机制的语言结合,首先要解决的是如何通讯?其次是通讯内容如何处理?最后是两者开发,部署环境整合?
1.1   两种语言对比
Php:直观,快速,简单,易学,开发动态网页效率高,草根文化气息浓重,是语言世界的平民英雄,注重于结果。
Java:强大而复杂,有众多高端功能,又有IMB、Oracle等企业大颚的追捧,是语言世界的贵族王子。
1.2   通讯问题
1.2.1   消息队列
从操作系统层面观察: PHP和Java是系统中运行的不同进程,他们之间沟通属于进程间通信技术(IPC):
    

在传统的Unix环境中,IPC技术有:管道、消息队列、共享内存、信号量等,但在同一个系统中,IPC通信比基于TCP的socket通信在性能、资源占用方面有相当大的优势。
在Unix/Linux中,PHP基本提供了所有IPC的访问接口,因为PHP可以看作是以C语言为核心的一个壳,而IPC是系统内核的组成部分,对外提供了一组C函数接口,因此PHP可以非常顺畅的运用IPC技术。而Java为了追求夸平台性(Windows的IPC技术和Unix的不同),没有提供系统级的IPC访问,这也体现了Java的文化特色:为追求统一可牺牲效能。
1.2.2     Socket
消息队列技术只能适用于Unix/Linux系统,而SOCKET基于TCP/IP的通讯机制,从而适应各种平台。
 

从上图中看出,PHP承担HTTP层的职责,而Java承担业务层的职责,他们通过System V Message Queue(消息队列,进程间通讯IPC中的一种)相互沟通,Java需要JNI的支持。
使用消息队列有以下好处:
1.       使php和java保持独立性
2.       有极高的传输速度,大于socket
3.       相对于socket方式,Java服务端只向本机提供服务(没有对外侦听端口),相对安全,易于管理。
1.3     通讯内容问题
通信问题解决了,通信内容如何解决呢?
PHP和Java各自语言内部定义的数据类型,当两种语言互相传输数据时,数据类型怎样进行转换呢? 
(1)Xml: xml确是一种夸平台、能够很好描述对象模型的数据封装技术,但xml体积大传输速率慢,通讯两端解析也比较麻烦。
 (2) 序列化: 在传输过程中使用序列化和反序列化对象来传输数据是一种公认且比较合理的方式,且两种语言都支持。
2   Java与php 结合选型
目前已知的PHP与Java在Web间整合技术可分成SOAP(Simple Object Access Protocol)、Quercus、PHP/Java Bridge三种,这些技术可以让PHP与Java在开发Web应用程序时互相使用彼此的程序库。
SOAP
SOAP是IBM、Microsoft等公司开发、W3C推荐,用来实现分布式对象技术的协议。SOAP提供了一套以XML来包装程序调用、参数传递与信息回传的机制,借助XML纯文字的特性,可通过HTTP、HTTPS、SMTP等通信管道穿越企业的防火墙。比起CORBA、Java RMI及DCOM这些以专属binary格式传送数据的分布式对象技术协议,SOAP具有与程序语言、平台和硬件无关的特性。
Quercus
Quercus是一个开源 PHP 5 引擎,它已经拥有了纯 Java 的完整实现。Quercus 在 Resin 应用服务器之上运行,利用了负载平衡、代理缓存等 Resin 特性。
PHP/Java Bridge
开源产品有:Php-java-bridge 与 LAJP
2.1  选择条件
ü 免费、开源
ü 简单易用
ü 高效稳定
2.2    LAJP
2.2.1    特点
Ø 优势互补: PHP是非常流行的WEB编程脚本语言,有易学、易用、开发部署效率高的特点,         非常适合网页编程;JAVA适合编写具有复杂的业务功能和数据的程序,二者结合可发挥各自优势。
Ø 高效稳定:Apache+PHP组合可带来优异的WEB服务稳定性,而JAVA可补充如连接池、事物管理、分布式、对象模型等高端特性。
Ø 创新的通信机制: PHP和Java间的通讯方式采用系统消息队列和Socket两种机制,兼顾通讯效率和平台兼容性。
Ø 数据类型自动转换机制: PHP数据和Java数据可准确地自动匹配和转换,无须程序员编写解析代码。
Ø 易用:LAJP安装配置简单,PHP端和JAVA端编程符合各自的编程习惯。
Ø 轻量级:LAJP架构非常轻量级,除了最基本的PHP和Java环境,不需要任何扩充的、第三方的组件、容器。
2.2.2      数据类型转换
PHP和Java各有其语言内部定义的数据类型,当PHP数据传送到Java,或Java数据传送到PHP时,LAJP在内部自动地、准确地对他们进行转换,程序员无需进行任何的解码工作。

2.2.3    LALP 运行环境
消息队列模式
环境需要满足System V消息队列的运行:
  • 系统 目前常见的Unix/Linux系统都可满足php(Apache)、java的运行,其中大部分默认支持System V消息队列。
  • php php需要通过消息队列和java进程通信,按php的说明,php在4.3.0版本以后支持System V消息队列。
  • apache 无特殊要求,满足php要求即可。
  • java java版本在1.5以后。
  • 在Unix/Linux环境中,推荐使用消息队列模式。
socket模式
  • 系统 没有限制,很难找到不支持TCP/IP的系统。
  • php 按php的说明,php版本>=4.1.0支持socket
  • apache 无特殊要求,满足php要求即可。
  • java java版本在1.5以后。
  • Windows系统只能使用socket模式
在开发过程中可以同时使用这两种模式,比如一般开发者使用Windows环境,而程序部署在Linux系统中,LAJP在模式的配置上和编码无关。
2.2.4          部署
2.2.4.1         分布式架构
在重要的、关键性的业务场景中,用户交互层和业务层是分开部署的,LAJP在此类架构中可以这样使用:
 
WEB服务器中的Java是非常“薄”的一层,仅用来连接后面的EJB服务。
2.2.4.2         集群
随着用户访问量的增加,WEB服务往往成为系统中的瓶颈,下面是LAJP在集群中的架构参考:

2.2.4.3         web集群
通过使用socket通讯模式的LAJP,可以搭建出简单的分布式的WEB集群架构:

2.2.4.4         复杂架构应用
LAJP使用的灵活性,架构的设计和选择更多在于我们自己的思想,下面的架构参考在WEB层、EJB层都使用了集群:

memcache是分布式的内存对象缓存技术,在PHP中可以非常方便的将Session数据存储在其中,来同步WEB集群中各节点中的数据,从这里也可以体现到PHP在WEB领域相对于Java的“专业”。
转载地址:http://blog.csdn.net/sean_cd/article/details/8673949

Java+PHP整合相关推荐

  1. java王者归来pdf_《JAVA WEB整合开发王者归来》刘京华.pdf

    全书分为9篇,内容层次清晰,难度循序渐进.第1篇为入门篇,内容包括JavaWeb开发概述等:第2篇为基础篇,内容包括Servlet技术.JSP技术.会话跟踪.过滤器Filter.监听器Listener ...

  2. mongocollection java_mongodb与java的整合

    mongodb的相关命令我们这里不在赘述,因为其文档下写的非常清楚,也很容易懂.这里我们说一下其余java的整合,mongodb配置请查看官方文档 1.首先我们应该导入期相关依赖, org.mongo ...

  3. java创建描述文件,IT技术交流:Java 轻量级整合开发

    原标题:IT技术交流:Java 轻量级整合开发 ervlet-ActionServlet 控制器,接受用户请求和状态改变,以及发出视图选择 FilterDispatcher Action 控制器的一部 ...

  4. webspere php,Project Zero、WebSphere sMash、PHP和JAVA的整合

    Project Zero.WebSphere sMash.PHP和JAVA的整合 从架构设计方面考虑,很多系统采用了 Java Bridge把php和JAVA技术结合起来,利用PHP的快速响应和JAV ...

  5. bi java lajp 和php_新宠混血儿诞生记--Java+PHP整合

    这几天,一直在研究一个新的开发模式,所以把他帖出来,供大家分享一下.使用开源的LAJP技术. 目的: 验证两种各自领域称王的语言(JAVA /PHP),不同语言.不同机制的组合在一起,PHP负责WEB ...

  6. JAVA WEB整合开发王者归来 -- 读书笔记 by CZF 完整版

    JAVA WEB整合开发王者归来 -- 读书笔记  目录 第1章 概述. 1 第2章 搭建web开发环境. 1 第3章 Servlet技术. 1 第4章 深入JSP技术. 7 第5章 会话跟踪. 12 ...

  7. 我的世界1.12.2java下载_我的世界java版整合包

    Minecraft我的世界java版整合包是一款由mcbbc论坛大神提供整合包资源,适合休闲的玩家一键安装去玩,也适合想进军MC的小白用户安装,本整合包整合了从1.6.2到1.12.2所有版本的jav ...

  8. java web 整合海康威视录像机摄像 SDK

    java 项目 demo 目录结构 java web 整合海康威视录像机摄像 SDK 实现拍照功能. 一.maven 项目结构 [提示]主要的是 HCNetSDK.java 文件,其中都是海康 jav ...

  9. java springboot整合zookeeper入门教程(增删改查)

    java springboot整合zookeeper增删改查入门教程 zookeeper的安装与集群搭建参考:https://www.cnblogs.com/zwcry/p/10272506.html ...

最新文章

  1. Sciences:Knight组发表尸体降解过程中的微生物组
  2. Java脚本学习-笔记二
  3. Android开发中完全退出程序的三种方法
  4. 2015-12-18 学习心得
  5. python的输出方式_Python--输出方式
  6. mac安装软件管理Android手机,Mac如何管理Android手机:这方式很得体
  7. maven添加非官方jar包到本地库
  8. 增量索引和全量索引_搜索引擎(七)高可用的solr搜索引擎服务架构
  9. 关于TCP/IP协议及网络通信相关问题
  10. Python正则表达式指南上半部
  11. sql自动审核工具-inception
  12. ICE专题:编译环境构建
  13. 计算机应用基础第3次平时作业,计算机应用基础第3次作业.doc
  14. Remix恢复已部署的合约
  15. 如何在本地运行jar文件
  16. 解决Kaggle新用户注册无法弹出验证提示的问题
  17. bootstrap介绍
  18. 统计学习方法 第二章 感知机
  19. android模拟器命令大全,玩转安卓模拟器命令行
  20. 渗透测试如何学习? (*╹▽╹*) 信息收集 ~ 其一

热门文章

  1. 帝国CMS简单的列表或公共模板自定义文字导航高亮显示当前栏目名称教程
  2. android 应用内悬浮,Andorid 应用内悬浮控件实践方案总结
  3. 算法第一天力扣---2651. 计算列车到站时间
  4. 绕cdn,求真实ip
  5. Android10双sim卡修改默认流量卡问题
  6. CVE-2013-4547
  7. Word中如何实现图片自动编号与文中引用编号对应
  8. 笛卡尔坐标系左手坐标系与右手坐标系
  9. KDD99数据集的特征(Features)介绍
  10. 设计模式-备忘录模式(Memento)-Java