导航:首页 > 编程语言 > php调用hessian

php调用hessian

发布时间:2024-12-01 21:20:47

1. 微服务跨语言调用(摘选)

微服务架构已成为目前互联网架构的趋势,关于微服务的讨论,几乎占据了各种技术大会的绝大多数版面。国内使用最多的服务治理框架非阿里开源的 bbo 莫属,千米网也选择了 bbo 作为微服务治理框架。另一方面,和大多数互联网公司一样,千米的开发语言是多样的,大多数后端业务由 java 支撑,而每个业务线有各自开发语言的选择权,便出现了 nodejs,python,go 多语言调用的问题。

跨语言调用是一个很大的话题,也是一个很有挑战的技术活,目前业界经常被提及的解决方案有如下几种,不妨拿出来老生常谈一番:

当我们再聊跨语言调用时我们在聊什么?纵观上述几个较为通用,成熟的解决方案,可以得出结论:解决跨语言调用的思路无非是两种:

如果一个新型的团队面临技术选型,我认为上述的方案都可以纳入参考,可考虑到遗留系统的兼容性问题

旧系统的迁移成本

这也关键的选型因素。我们做出的第一个尝试,便是在 RPC 协议上下功夫。

通用协议的跨语言支持

springmvc的美好时代

springmvc

springmvc

在没有实现真正的跨语言调用之前,想要实现“跨语言”大多数方案是使用 http 协议做一层转换,最常见的手段莫过于借助 springmvc 提供的 controller/restController,间接调用 bbo provider。这种方案的优势和劣势显而易见

通用协议的支持

事实上,大多数服务治理框架都支持多种协议,bbo 框架除默认的 bbo 协议之外,还有当当网扩展的 rest协议和千米网扩展的 json-rpc 协议可供选择。这两者都是通用的跨语言协议。

rest 协议为满足 JAX-RS 2.0 标准规范,在开发过程中引入了 @Path,@POST,@GET 等注解,习惯于编写传统 rpc 接口的人可能不太习惯 rest 风格的 rpc 接口。一方面这样会影响开发体验,另一方面,独树一帜的接口风格使得它与其他协议不太兼容,旧接口的共生和迁移都无法实现。如果没有遗留系统,rest 协议无疑是跨语言方案最简易的实现,绝大多数语言支持 rest 协议。

和 rest 协议类似,json-rpc 的实现也是文本序列化&http 协议。bbox 在 restful 接口上已经做出了尝试,但是 rest 架构和 bbo 原有的 rpc 架构是有区别的,rest 架构需要对资源(Resources)进行定义, 需要用到 http 协议的基本操作 GET、POST、PUT、DELETE。在我们看来,restful 更合适互联网系统之间的调用,而 rpc 更适合一个系统内的调用。使用 json-rpc 协议使得旧接口得以兼顾,开发习惯仍旧保留,同时获得了跨语言的能力。

千米网在早期实践中采用了 json-rpc 作为 bbo 的跨语言协议实现,并开源了基于 json-rpc 协议下的 python 客户端 bbo-client-py 和 node 客户端 bbo-node-client,使用 python 和 nodejs 的小伙伴可以借助于它们直接调用 bbo-provider-java 提供的 rpc 服务。系统中大多数 java 服务之间的互相调用还是以 bbo 协议为主,考虑到新旧协议的适配,在不影响原有服务的基础上,我们配置了双协议。

bbo 协议主要支持 java 间的相互调用,适配老接口;json-rpc 协议主要支持异构语言的调用。

定制协议的跨语言支持

微服务框架所谓的协议(protocol)可以简单理解为:报文格式和序列化方案。服务治理框架一般都提供了众多的协议配置项供使用者选择,除去上述两种通用协议,还存在一些定制化的协议,如 bbo 框架的默认协议:bbo 协议以及 motan 框架提供的跨语言协议:motan2。

motan2协议的跨语言支持

                                                                                                            motan2

motan2

motan2 协议被设计用来满足跨语言的需求主要体现在两个细节中—MetaData 和 motan-go。在最初的 motan 协议中,协议报文仅由 Header+Body 组成,这样导致 path,param,group 等存储在 Body 中的数据需要反序列得到,这对异构语言来说是很不友好的,所以在 motan2 中修改了协议的组成;weibo 开源了 motan-go ,motan-php ,motan-openresty ,并借助于 motan-go 充当了 agent 这一翻译官的角色,使用 simple 序列化方案来序列化协议报文的 Body 部分(simple 序列化是一种较弱的序列化方案)。

                                                                                                        agent

agent

仔细揣摩下可以发现这么做和双协议的配置区别并不是大,只不过这里的 agent 是隐式存在的,与主服务共生。明显的区别在于 agent 方案中异构语言并不直接交互。

bbo协议的跨语言支持

bbo 协议设计之初只考虑到了常规的 rpc 调用场景,它并不是为跨语言而设计,但跨语言支持从来不是只有支持、不支持两种选择,而是要按难易程度来划分。是的,bbo 协议的跨语言调用可能并不好做,但并非无法实现。千米网便实现了这一点,nodejs 构建的前端业务是异构语言的主战场,最终实现了 bbo2.js,打通了 nodejs 和原生 bbo 协议。作为本文第二部分的核心内容,重点介绍下我们使用 bbo2.js 干了什么事。

Dubbo协议报文格式

                                                                                                        bbo协议

bbo协议

bbo协议报文消息头详解:

magic:类似java字节码文件里的魔数,用来判断是不是 bbo 协议的数据包。魔数是常量 0xdabb

flag:标志位, 一共8个地址位。低四位用来表示消息体数据用的序列化工具的类型(默认 hessian),高四位中,第一位为 1 表示是 request 请求,第二位为 1 表示双向传输(即有返回 response),第三位为 1 表示是心跳 ping 事件。

status:状态位, 设置请求响应状态,bbo 定义了一些响应的类型。具体类型见com.alibaba.bbo.remoting.exchange.Response

invoke id:消息 id, long 类型。每一个请求的唯一识别 id(由于采用异步通讯的方式,用来把请求 request 和返回的 response 对应上)

body length:消息体 body 长度, int 类型,即记录 Body Content 有多少个字节

body content:请求参数,响应参数的抽象序列化之后存储于此。

协议报文最终都会变成字节,使用 tcp 传输,任何语言只要支持网络模块,有类似 Socket 之类的封装,那么通信就不成问题。那,跨语言难在哪儿?以其他语言调用 java 来说,主要有两个难点:

ps:bbo 协议通讯demo( https://github.com/lexburner/Dubbojs-Learning )

2. 为什么大型网站前端使用 PHP 后台逻辑用 Java

最近纠结了一下,如果开发一个大型的网站,我到底应该使用php还是jsp,后台到底使用php还是用java,我的选择要么是php要么是java,因为我喜欢linux、unix,当然window平台也必须支持,以便哦的妹纸可以查看。这就要求用一些跨平台相当好的软件+工具+语言,所以选择只能是这么几个。最后我的决定是php+java,一个前台一个后台,理由如下: php和java在开源社区的活跃度严重超过了其他的语言,使用人数也都是相当之多;活跃的开发工程师们能够给我帮助,且这俩都能很好的跨平台,不用花费大量的人力物力去维护 我也做过一个物联网的网关网站,比较复杂,当时采用的是jsp+java,复杂程度可想而知,单单说开发过程,网站部分繁琐,每次想查看结果运行网站的时候还需要重新打包部署一下,严重影响了哦的开发效率,每天的时间都是在等待(因为网站比较复杂,打包部署需要浪费一些时间)。相对来说呢,php就没有了,php灵活,好学,上手快,容易闷态慎修改,容易发布,关键是热部署,这个真让哦眼睛大亮。当然看待任何事物都需要两种眼光,php也会有缺点,比如没有太好的开发IDE,所以拼写错误很正常,且php的sql注入危蚂敬险较大点,执行效率不高,安全性不如java。还有一些理由,来自知乎的米米们给的建议: Java的优点则是稳定可靠、运行效率高(尤其是JIT的出现之后差距更大了)、不容易犯错(强类型、预编译、必须拦截异常等等),缺点是开发和发布的效率相对较低。尽管优秀的工程师能在一定程度上改变以上的问题,但通常而言,哪能到处都是高手多如狗的梦之队? 从MVC的层次结构上说,在一般网站项目的开发周期中,需求变更最频繁、调整最多的是View,其次是Controller,最后是Model。这非常好理解,没事干谁天天改数据结构?每次版本升级控制结构都要改的啦,或多或少而已。再次是两者之间的通信,目前RPC技术已经足够成熟,无论是Web Service/Hessian/RESTful API都能够让开发人员专注在功能开发上,而不需要过多的考虑异构平台的差异和通讯的细节。这也就意味着在大公司里同时应用两种语言的方案并不会引入过多的复杂度和工作量。当然,文档量的下限倒是因此被拔高了不少,但事实上大部分团队对此其实都是喜闻乐见的:别每天说文档重要但没空了,你不写其他同事怎么配合? 靠近用户的前端,使用PHP能够更快的完成前端频繁而琐碎的更新,自如的应对各种需求的变化。页面的结构调整、用户输入内容的基本验证、仅只和用户交互有关的简单逻辑等都很适合使用PHP来开发,甚至可以通过类似Smarty等模板技术将其页面的变动迁移到前端团队。而基本的业务逻辑和数据的更新采用Java开发,可以有效的提高复用度、提升性能和吞吐能力、规避安全问题等。而开发效率稍有降低换来的是可维护性的提升,发布速度慢就更不是问题了,因为通常对于基础业务逻辑的调整往往都是整体修改,并层层测试确认才能发布的。 所以,大型网站前端采用PHP后端采用Java,既好招人又好维护、系统稳定还性能高、连安全性都大大增加。代码复用、文档完备度居然也都改善了。让你在以上这些好处触手可及时,对架构师知识谱系在广度上要求更高一些这事根本就不是个问题。
单一方案其实一样可以做良好的隔离,PHP同样可以提供Service,而性能问题其实很多时候是算法和架构的问题而不是语言差异的问题。如Velocity或JSTL等也是很优秀的隔离方案。
但这些方案在高压力下会暴露出很多问题而体现双语言的优势,这些在上面其实都提到,详细说明一些很难得到改变的点:
1. PHP由于其动态脚本语言的特性,包括类、函数、常量在内都需要在每次请求周期中重复执行后才能建立运行环境;为了保证解析速度而牺牲编译质量;应用了FastCGI但仅仅只是复用进程处理请求减少fork成本而不是像其他语言,初始化完毕后通过FastCGI的接口获得数据并以对应接口返回数据等几个原因,基本上已经不可能在性能上追回当初更烂现在开着JIT牌跑车的Java了。
2. 在PHP里是如此的容易犯错而难以发现,即使你用实质上出自官方的闭逗Zend Studio,也无法改变一个事实:要保证你的程序高质量无大错,得要有充足的经验、足够的严谨、以及——负责任的QA。淘宝的黄裳就曾经拿IDE这事开过玩笑。而玩笑背后的那个原因“缺乏中间件”最近几年有不少的改善,主要是不少中间件的支持变得更广泛了从而让PHP得益,但发展的根源其实还是在C和Java社区。性能和易犯错则是语言特性造成的技术难点,也是用来换取灵活、快捷的必要代价,很难去指望有根本的改善。
3. Java的世界里也有JSTL、Velocity和Freemaker等,但和PHP灵活而强大的动态能力、丰富的函数和类库、轻松的学习成本、多到令人发指的文档相比,简直就是渣,就是渣啊!JSTL改完了要重启Context啊有木有?Velocity不关缓存也要重启啊有木有?Velocity开缓存性能低下啊有木有?即使这些都不管,调整下某个数据校验规则要改Action也要重启有木有?
实际工作中性能问题可以通过良好的架构解决,容易犯错的问题可以通过框架和规范以及全面的测试来解决,中间件选择少些但其实该有的都有了,Java的灵活性一样有不少可供考虑的解决方案哪怕是挫得要死的摘掉节点重启,完成后重新上节点的策略。
所以,大家会看到单一语言的技术团队也很多,这个问题的真正考虑还是更多在团队自身的特点、积累等等。用了双语言的,也知道自己为什么要用这些,不用的也清楚自己的路该怎么走。最后的最后说一句:如果你不知道自己为什么要用双语言方案的话,基本上你也就不需要考虑它了

3. 什么是PHP,PHP能干什么,为什么使用PHP

什么是PHP,PHP能干什么,为什么使用PHP

在学习任何东西之前,我们都得了解这门东西究竟是什么,有什么用。学习PHP一样如此。
一、什么是PHP
PHP,全称 Hypertext Preprocessor ,中文翻译“超文字前处理器”。
在PHP的官网是这样介绍PHP的:
PHP is a popular general-purpose scripting language that is especially suited to web development.
Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world.
照顾英文能力较差的同学,以下为中文版
PHP是一种被广泛应用的开源通用指令码语言,尤其适用于 Web 开发。
拥有快速,灵活,实用的特点,PHP能做任何事,包括你的个人部落格甚至是全球性的大型站点系统。
PHP核心由C开发,因此在语法上跟C有不少相似之处。但PHP绝对不是C。
PHP语法除了跟C有相似之处外,还跟Java、Perl比较流行的程式语言存在相似的地方。因此,如果你有上述语言基础,PHP入门会更加快速。
二、PHP能干什么
PHP能干任何事!
PHP能直接嵌入HTML语言中,与HTML混编。PHP开发的目的主要是允许 web 开发人员快速编写动态生成的 web 页面,但 PHP 的用途远不只于此。
PHP还包含了命令列执行接口(mand line interface),和产生图形使用者接口(GUI)程式。
PHP能干任何事!
PHP能干任何事!
PHP能干任何事!
重要的事情要说3遍!
三、为什么选择PHP
1、PHP开源免费,没有任何收费的专案。你可以随便修改他的核心然后用于自己的商业使用。
2.、PHP开发元件丰富(对于新手来说一堆IDE也是够选择困难症纠结的)
3、社群成熟,85%以上的问题能在社群找到相应的解决思路。
4、PHP学习成本低,不想某门语言要学就得三件套。见效快,学1个月基本能入门
5、开源库丰富,基本所有型别均有开源产品
6、PHP7.0基本不输任何一门语言~!这是重点
7、与MySQL近乎完美的支援
8、找工作容易
9、连Facebook都在用php,你还什么理由不用?

php能干什么

利用PHP技术应用而开发的网页自动生成工具,不仅可以作为自助建站的平台,同时也可以作为网站管理系统。它的资料更新很大程度上能满足使用者的"个性化需求",即在内容上和风格上接近使用者所想,该系统完全图形视觉化,即使不懂制作网页的专门技术,不懂HTML语言,通过对该系统中如栏目、模板设定、网站关键字、功能模组等进行引数设定,使用者也可以用它轻松地制作出千变万化、色彩丰富的网站。

为什么使用 PHP?

为什么使用 PHP?

PHP为什么使用array

1使用array_map可以简单搞定PHP删除档案、删除目录
2.具体程式码如下:
?php
删除目录下所有空目录
array_map('rmdir', glob('*', GLOB_ONLYDIR));
删除目录所有档案
array_map('unlink', array_filter(glob('*'), 'is_file'));
3.$data = array(
array(
'a' => 'first a',
'b' => 'first b'
),
array(
'a' => 'second a',
'b' => 'second b'
)
);
$array_column = array_map(function($element){
return $element['a'];
}, $data);
print_r($array_column);

为什么使用template engine php

PHP是一种HTML内嵌式的在服务器端执行的指令码语言,所以大部分PHP开发出来的Web应用,初始的开发模板就是混合层的资料程式设计。虽然通过MVC设计模式可以把程式应用逻辑与网页呈现逻辑强制性分离,但也只是将应用程式的输入、处理和输出分开,网页呈现逻辑(检视)还会有HTML程式码和PHP程式强耦合在一起。

php可以干什么?

你是初学者吧。我开始学的时候也是这样。不知道这个是干嘛的,我哥哥当时拉我一起去了北京的兄弟连,当时和我一样不知道这个是干嘛的人很多,但是我真心不想告诉你,我现在一个月有5K以上的工资。

php是程式语言,做网站,做程式都可以,不过它做网站能发挥它的长处,应用程式的话呢还是用Java、.好些

php为什么使用hessian和curl

这个应用可以使用JavaConfig完成配置。我把它切分为下面几个部分:
ServicesConfig(服务配置)
无需扫描元件,配置真的非常简单:
@Configuration
public class ServicesConfig {
@Autowired
private AountRepository aountRepository;

@Bean
public UserService userService() {
return new UserService(aountRepository);
}

php-fpm为什么使用socket

1、在配置档案/usr/local/php/etc/php-fpm.conf档案中找到
<value name= "listen_address">127.0.0.1:9000</value>
改为
<value name=listen_address> /var/run/phpfpm.sock</value>
重启php-fpm
/usr/local/php/ *** in/php-fpm restart
2、配置nginx
在/usr/local/nginx/conf/nginx.conf中找到
fastcgi_pass 127.0.0.1:9000;
改为
fastcgi_pass unix:/var/run/phpfpm.sock;
重启nginx
/usr/local/nginx/ *** in/nginx -s reload
试试吧我刚在后盾网问的讲师相关知识,我加上自己的理解,希望能帮到你(づ ●─● )づ

在PHP中,为什么使用mb

mb打头的函式,都最新新增的,好多要求php5版本
处理速度能更快,功能更强大一些
但也有一些预设是未被开启
没有非说得用mb函式的说法,合适的就是最好的
比如说mb_substr用来撷取中文时不会把一个汉字截断的现象
substr更适合撷取英文内容
但php预设是不支援的,需要在配置中解开
;extension=php_mbstring.dll

4. 现在开发网站,好像都是流行用php,那java web一般用在哪里呢它们之间的区别和优劣势在哪里呢

现在市场上的oa基本上可归结为两大阵营,即php阵营和java阵营。但对接触oa不久的用户来说,看到的往往只是它们的表相,只是明显的价格差异,却很难看出它们之间的实际差异。其实, PHP + MYSQL 不值钱不仅仅局限于oa软件,而是整体上PHP + MYSQL开发的软件都不如java开发的软件值钱。为什么PHP + MYSQL 的OA为什么不值钱呢?首先得明白php和java之间的差异才行。

1、系统的技术架构比较

分层是将系统进行有效组织的方式,分而治之的思想是计算机领域中非常重要的思想。在好的分层思想引导下,便能实现“高内聚、低耦合”,也能将具体的问题割裂开来,易于控制、易于延展,更易于分配资源。PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就十分强大,可以实现多层的网络架构。运用MVC的设计模式,可使oa系统具有更加高效、合理的系统架构。技术架构的落后,使运用php编写的oa软件系统先天不足,而后天又无法补足其先天上的劣势。使得系统在可拓展性、需求应变性上与JAVA编写的oa软件系统的差距越来越大。架构的差距,注定了php做的oa充其量是个小家碧玉,始终无法和java这种大家闺秀同台竞技。

2、数据库访问比较

PHP可编译成具有与许多数据库相连接的函数。将自己编写外围的函数去间接存取数据库。通过这样的途径当更换使用的数据库时,可以轻松地修改编码以适应这样的变化。但PHP提供的数据库接口支持彼此不统一,比如对Oracle, MySQL,Sybase的接口,彼此都不一样。由于PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。

而Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库,访问数据库的接口比较统一。如果同样是将开发的web应用从MYSQL数据数转到ORACLE数据,PHP需要做大量的修改工作,而且比较繁琐。但JAVA开发的便只需要很少的更改便能实现。

数据库访问方式的差异,奠定了php开发出的oa和java开发出来的oa是马车和火车的差距,前者只能亦步亦趋而且额度有限,后者却是工业化的结晶,不仅能够包容万物而且速度上稳步提升。

3、安全性对比

在同是开源和跨平台的java面前,php丢掉了很多的优势。在代码的安全性上尤为突出。php的开发程序在别人拿到代码后,可以很容易的进行修改。而java开发的程序由于无法看到完整的源代码,只能看到一些编译好的类文件,所以安全性较高。加之系统架构的优势,在安全性上php和java是相去甚远。

如果非要将php和java在安全性上做个比较的话,同一个小偷光顾php那是随便拿来随便改,想拿什么拿什么,拿的高兴还能大笔一辉某某到此一游。而光顾java的时候,便会发现警察把守,内设自动报警装置,即便突破重重阻扰后进入居室。那值钱的东西都放在加密后的保险柜中,只能望洋兴叹、铩羽而归。

4、前瞻性和拓展性

从整体来说,php适用于中小型系统,而java适用于大型系统。Php能够将单一的事件做好,但却不适合完成集成度较高的多项并发事件。为什么说php适合中小型系统而不适合做大系统呢?

首先, php缺乏多层结构支持。而对于大型的系统负荷站点,只能采用分布计算。将数据库、应用逻辑层和表示逻辑层彼此分开,并将同层的根据流量分开,组成二维数组。而php恰恰缺乏这种支持。

其次,PHP提供的数据库接口不统一,要将多个不同的数据库数据统一需要花费很大的力气。而JAVA则没有这种缺陷,可通过SUN Java的Java Class和EJB获得规模支持,通过EJB/CORBA以及众多厂商的Application Server获得结构支持。如IBM的E-business,它的核心是采用JSP/Servlet的Web Sphere,是通过CGI来提供支持的。

如果将Php比作将才,具备独挡一方的能力。那么java便是帅才,具有较好的前瞻性和拓展性,整体布局和协同能力强。能够指挥千军万马,最后逐鹿中原。

5、开发成本比较

既然php在诸多方面都不如java优异,那么php开发出的oa产品何以与java产品竞争呢?在于Php阵营普遍走的是低端路线,而java阵营走的是中高端路线。两者之间交*的区域较小。

软件价格的高低很大程度上和自身成本和功能相挂钩。php的入门门槛较低,绝大多数学过c的程序员都很容易转型为php程序员,这使得php程序员的泛滥成灾的同时,低成本的php软件产品也层出不穷。以PHP最经典的组合PHP + MySQL + Apache为例,由于所有软件都是开源免费的,所以投入并不高。

而java开发需要特定的环境,成长为一个合格的java程序员需要一定的时间,java程序员的成本也是php成本的几倍。Java的web应用服务器免费的有Tomcat、JBoss等,而要想具有很好的商业化服务便必须选用Web Sphere和 Web logic。这其中投入的成本无形中便超是php成本的N倍。所以,java开发oa的成本要远远高于php开发出来的同类软件产品。但也正由于java开发的成本较高,很难实现抄袭和短期内逾越的可能,也使得java用开发出的产品门槛更高。

不怕不识货,就怕货比货。Php开发出来的产品也能用,但是和java开出的同类产品是没法比较的。正因为php开发的产品整体性能和java开发的相去甚远,所以php运用低成本的低价优势和同类的java产品抗争,以价格落差来平衡购买者的心态。所以,PHP + MYSQL 的OA不值钱也就不足为怪了

第二种

比较PHP和JSP这两个web开发技术,在目前的情况是其实是比较PHP和Java的Web开发。以下是我就几个主要方面进行的比较:

一、 语言比较

Php是解释执行的服务器脚本语言,首先php有简单容易上手的特点。语法和c语言比较象,所以学过c语言的程序员可以很快的熟悉php的开发。而java需要先学好java的语法和熟悉一些核心的类库,懂得面向对象的程序设计方法。所以java不如php好学。

Java首先要编译成字节码.class文件,然后在java虚拟机上解释执行。Java的web开发首先最容易想到的就是JSP(现在已经到JSP2.0),原来的java的web开发都是用servlet来实现的,用servlet来开发需要程序员在java的源文件中嵌入大量的html代码。所以后来就出现了JSP,JSP可以方便的嵌入到html文件当中,其实jsp文件在服务器上执行的时候首先会被应用服务器转换成servlet,然后再编译执行。Jsp可以通过servlet和JavaBean的支持产生强大的功能。JavaBean 是一种可复用的、跨平台的软件组件。使用javabean可以方便的实现java代码和html的分离,能够增强系统的功能和软件的复用性。

Java的web开发属于SUN公司定义的J2EE其中的规范。而且在J2EE中包括了java的web开发的所有方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特别适合于做大型的企业级的应用。

二、 数据库访问比较

Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。

PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。例如:用Java开发的web应用从MySQL数据库转到Oracle数据库只需要做很少的修改。而PHP则需要做大量的修改工作。

三、 系统设计架构比较

采用Java的web开发技术,需要使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。所以用Java进行开发前期需要做大量的系统分析和设计的工作。

四、 跨平台性

Java和PHP都有很好的跨平台的特性。几乎都可以在不作任何修改的情况下运行在Linux或者Windows等不同的操作系统上。

五、 开发成本比较

PHP最经典的组合就是:PHP + MySQL + Apache。非常适合开发中小型的web应用,开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。

Java的web应用服务器有免费Tomcat、JBoss等,如果需要更好的商业化的服务有:Web Sphere和 Web logic。

六、 分布式多层架构比较

PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就比较强大,可以实现多层的网络架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用java的web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。

下面简要的说一下Struts,它实质上是在JSP Model2的基础上实现的一个MVC(Model、View、Controler)框架。JSP Model2体系结构是一种联合使用JSP 与Servlet 来提供动态内容的方法。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由Servlet实现的,视图由一组JSP文件组成。采用Struts可以明确角色的定义和开发者与网页设计者的分工。而且项目越复杂,其优势越明显。

七、 源代码安全

PHP开发的程序的源代码都是公开的,他人拿到php开发的程序后都可以进行修改。

Java开发的程序,最后用户拿到的是只是一些编译好的class类,无法看到完整的源代码,安全性高。

八、性能比较

有人做过试验,对这两种种语言分别做回圈性能测试及存取Oracle数据库测试。

在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的回圈。而PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒。

数据库测试中,二者分别对 Oracle 8 进行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒。

表格 1 PHP 与Java的比较

PHP JAVA

可复用性 低 高

开发速度 快 慢

易维护性 差 优

可移植性 优-Linux、Windows、Unix等

安全性 低 高

开发费用 低 高

多层架构 差 优

数据库访问 接口不统一 接口统一

可扩展性 差 优

面向对象 差 优
综上 PHP适合于快速开发,中小型应用系统,开发成本低,能够对变动的需求作出快速的反应。而Java适合于开发大型的应用系统,应用的前景比较广阔,系统易维护、可复用性较好。还有,同样功能的系统用Java开发的系统要比PHP开发的系统的价格要高

阅读全文

与php调用hessian相关的资料

热点内容
压缩机扩压器 浏览:740
寒冰剑命令 浏览:768
移动我的服务器地址 浏览:93
androidview翻转 浏览:984
服务器电源如何入账 浏览:704
套娃程序员 浏览:78
织梦源码官网模板下载 浏览:708
程序员证书有效期 浏览:854
python异常处理模块 浏览:71
如何关闭app加速度探测 浏览:92
录音保存在文件夹 浏览:975
程序员的心声真的很重要 浏览:716
csgo命令give 浏览:579
战地V怎么开服务器 浏览:572
探测ip命令 浏览:116
java手动异常 浏览:950
客户端反编译视频 浏览:237
网络映射命令 浏览:793
单片机a到f循环 浏览:884
android应用层开发 浏览:197