搜索
首页后端开发php教程Java与PHP之间的关联

Java与PHP之间的关联

Jun 15, 2018 pm 02:12 PM
javaphp

Java与PHP之间的关联

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

1、技术问题

两种不同环境,不同机制的语言结合,首先要解决的是如何通讯?其次是通讯内容如何处理?最后是两者开发,部署环境整合?

1.1两种语言对比

Php:直观,快速,简单,易学,开发动态网页效率高,草根文化气息浓重,是语言世界的平民英雄,注重于结果。

Java:强大而复杂,有众多高端功能,又有IMB、Oracle等企业大颚的追捧,是语言世界的贵族王子。

1.2通讯问题

1.2.1消息队列

从操作系统层面观察: PHP和Java是系统中运行的不同进程,他们之间沟通属于进程间通信技术(IPC):

5dcbd428cc4a86218de9332a3c64b470-0.jpg

在传统的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的通讯机制,从而适应各种平台。

 

5dcbd428cc4a86218de9332a3c64b470-1.jpg

从上图中看出,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) 序列化: 在传输过程中使用序列化和反序列化对象来传输数据是一种公认且比较合理的方式,且两种语言都支持。

 

2Java与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在内部自动地、准确地对他们进行转换,程序员无需进行任何的解码工作。

 

5dcbd428cc4a86218de9332a3c64b470-2.jpg

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在此类架构中可以这样使用:

5dcbd428cc4a86218de9332a3c64b470-3.jpg 

WEB服务器中的Java是非常“薄”的一层,仅用来连接后面的EJB服务。

2.2.4.2         集群

随着用户访问量的增加,WEB服务往往成为系统中的瓶颈,下面是LAJP在集群中的架构参考:

 

5dcbd428cc4a86218de9332a3c64b470-4.jpg

2.2.4.3         web集群

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

 

5dcbd428cc4a86218de9332a3c64b470-5.jpg

2.2.4.4         复杂架构应用

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

 

5dcbd428cc4a86218de9332a3c64b470-6.jpg

memcache是分布式的内存对象缓存技术,在PHP中可以非常方便的将Session数据存储在其中,来同步WEB集群中各节点中的数据,从这里也可以体现到PHP在WEB领域相对于Java的“专业”。

本文介绍了Java与PHP之间的关联,更多相关内容请关注php中文网。

相关推荐:

对于php实用经验的总结

ThinkPHP的相关总结

关于thinkphp基类的相关内容

以上是Java与PHP之间的关联的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
您如何在PHP中创建和使用接口?您如何在PHP中创建和使用接口?Apr 30, 2025 pm 03:40 PM

本文解释了如何创建,实施和使用PHP中的接口,重点关注其对代码组织和可维护性的好处。

crypt()和password_hash()有什么区别?crypt()和password_hash()有什么区别?Apr 30, 2025 pm 03:39 PM

本文讨论了PHP中的crypt()和password_hash()之间的差异,以进行密码哈希,重点介绍其实施,安全性和对现代Web应用程序的适用性。

如何防止PHP中的跨站点脚本(XSS)?如何防止PHP中的跨站点脚本(XSS)?Apr 30, 2025 pm 03:38 PM

文章讨论了通过输入验证,输出编码以及使用OWASP ESAPI和HTML净化器之类的工具来防止PHP中的跨站点脚本(XSS)。

PHP中的自动加载是什么?PHP中的自动加载是什么?Apr 30, 2025 pm 03:37 PM

自动加载PHP会在需要时自动加载类文件,从而通过减少内存使用和增强代码组织来提高性能。最佳实践包括使用PSR-4和有效组织代码。

什么是PHP流?什么是PHP流?Apr 30, 2025 pm 03:36 PM

PHP流通过一致的API统一处理文件,网络插座和压缩格式等资源的处理,从而提高复杂性并增强代码灵活性和效率。

可以使用PHP上传的文件的最大大小是多少?可以使用PHP上传的文件的最大大小是多少?Apr 30, 2025 pm 03:35 PM

本文讨论了在PHP中管理文件上传大小的管理,重点是2MB的默认限制以及如何通过修改PHP.INI设置来增加它。

PHP中的无效类型是什么?PHP中的无效类型是什么?Apr 30, 2025 pm 03:34 PM

本文讨论了PHP 7.1中引入的PHP中的无效类型,允许变量或参数为指定类型或NULL。它突出显示了诸如提高可读性,类型安全性和明确意图的好处,并解释了如何声明

unset()和unlink()函数之间有什么区别?unset()和unlink()函数之间有什么区别?Apr 30, 2025 pm 03:33 PM

本文讨论了unset()和unlink()功能在编程中的差异,重点关注其目的和用例。 unset()从内存中删除变量,而unlink()从文件系统中删除文件。两者都对效率至关重要

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。