在编程语言中,人们热衷比较当红的编程语言,在编程语言中有很多当红的编程语言,人们是喜爱一一做对比的,当下比较多的就是Java和PHP,不知道你有没有对它们进行过对比,你知道它们有什么区别吗?学哪个好呢?今天就跟电脑培训http://www.kmbdqn.cn/一起来,列举下吧。
Java和PHP有什么区别?学哪个好?1.Java是门面对对象的程序设计语言,PHP是解释执行的服务器脚本语言。
论哪个比较简单好学,那么自然是PHP,Java要学习的内容远远比PHP要多论哪个比较应用广泛,那么自然是Java,Java市场高达20%,PHP市场份额10%可能都没有论哪个比较好找工作,那么自然是Java,因为Java应用广,工作岗位需求多。
2.Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。
访问数据库的接口比较统一。
PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。
用Java开发的Web应用从MySQL数据库转到Oracle数据库只需要做很少的修改。
而PHP则需要做大量的修改工作。
3.Java很多的性能都是PHP无法比拟的,比如安全性,从安全性出发,很多的企业甚至是国家都会选择用Java,PHP开发的程序的源代码都是公开的,他人拿到PHP开发的程序后都可以进行修改。
Java开发的程序,最后用户拿到的是只是一些编译好的class类,无法看到完整的源代码,安全性高。
Java虽然难学点,但是Java在市场上明显占更多的优势。
一、需要解决中央控制端到各节点服务器之间的通信。这个其实牵扯到一个通信协议的问题,各语言都有自己的socket,thread的库,直接调用即可。但是这个通信协议就需要自己来完成了。既不能太简单,太简单了,明码传输,如果别人获知了这个接口,就很容易执行一些令人讨厌的操作。也不能太复杂,太复杂了等于是给自己找麻烦,所以简单的数据包编解码的工作或者用token验证的方式是需要的。通信协议起码要两种,一种是传输命令执行的协议,一种是传输文件的协议。
二、跨语言的socket通信
为什么要跨语言,主控端和代理端通信,用什么语言开发其实无所谓。但是为了给自己省事,尽可能使用服务器上已经有了的默认语言,Ambari前期采用php+puppet的方式管理集群,这不是不可以,puppet自己解决了socket通信协议和文件传输的问题,可你需要为了puppet在每台服务器上都安装ruby。我是个有点服务器和代码洁癖的人。光是为了一个puppet就装个ruby,我觉得心里特对不起服务器的资源。所以我自己写了一个python的代理端。python是不管哪个linux系统在安装的时候就都会有了。然后主控端的通信,可以用python实现,也可以用php实现,但是考虑到对于更多的使用者来说,改php可能要比改tornado简单许多,所以就没用python开发。hadoop分支版本众多,发布出去,用户要自己修改成安装适合自己的hadoop发行版,就势必要改源码,会php的明显比会python的多。php里面的model封装了所有的操作,而python只是个操作代理人的角色而已。
所以也延伸出一个问题,什么语言用来做这种分布式管理系统的代理端比较合适,我自己觉得,也就是python比较合适了,操作系统自带,原生的package功能基本够用。用java和php也可以写agent,但是你势必在各节点预先就铺设好jre或者php运行环境。这就跟为什么用python和java写mapred的人最多是一样的。没人拦着你用nodejs写mapred,也可以写,就是你得在每个节点都装v8的解释引擎,不嫌麻烦完全可以这样干。原理参看map/reduce论文,不解释。perl也是操作系统原生带的,但是perl的可维护性太差了,还是算了吧。
所以这就牵扯到一个跨语言的socket问题,理论上来说,这不存在什么问题。但这是理论上的,实际开发过程中确实存在问题,比如socket长连接,通信数据包在底层的封装方式不同。我没有使用xml-rpc的原因之一就是我听说php的xmlrpc跟其他语言的xmlrpc有不同的地方,需要修改才能用,我就没有用这种办法。最早是自己定义的操作协议,这时就遇到了这些问题,所以后来直接采用了thrift方式。就基本不存在跨语言的socket通信问题了。
三、代理端执行结果的获取
无论命令还是文件是否在代理端执行成功,都需要获取到执行结果返回给中央端。所以这里也涉及一个读取节点上的stdout和stderr的问题。这个总体来说不是很难,都有现成的包。当然这个时候你需要的是阻塞执行,而不能搞异步回调。
还有个问题是,我要尽可能使用python默认就带的包,而尽量不让服务器去访问internet下载第三方的包。
还有代理端最重要的一点,就是python的版本兼容性。centos5用python 2.4,centos6用python 2.6,ubuntu基本默认都是2.7。所以一定要最大限度的保证语言的跨版本兼容性,要是每个操作系统和每一个版本我都写一个代理,我一个人就累死了。
转行学习java更好。因为java的应用更广泛,包括大中型的商业应用、桌面应用、移动领域应用,而且java的就业前景更好。千锋教育有线上免费Java线上公开课。 作为一种最流行的网络编程语言之一,java语言在当今信息化社会中发挥了重要的作用。Java语言具有面向对象、跨平台、安全性、多线程等特点,这使得java成为许多应用系统的理想开发语言。从语法层来说,java和php都是c语系。关键字,操作符,以及语句差别不大,都能跨平台,都是基于解释型的语言。而且java是强类型,通用语言,可以用于客户端,服务器端等各种环境。而php本身定位服务器语言,并且是弱类型语言。随着时间的推移,你会发现,原本各种脚本语言越来越向面向对象,面向接口编程,并且逐渐向强类型过度的趋势。所以最好还是一步到位,学习java最好。如果想了解更多相关知识,建议到千锋教育了解一下。千锋教育目前在18个城市拥有22个校区,年培养优质人才20000余人,与国内20000余家企业建立人才输送合作关系,院校合作超600所。欢迎分享,转载请注明来源:夏雨云
评论列表(0条)