最近2年node.js很火,异步与协程是网络开发方面热门的话题。在追求新技术的同时,也应该反思下这里面存在的陷阱。node.js确实是一门有趣好玩有个性的语言和技术,动态性,全异步回调的方式,闭包等等特性。值得所有程序员尝试一下。
但本文将介绍的是一门另外的容易被大家轻视的编程语言:php。长期以来php都是作为一门为web开发而生的前端脚本语言。php极其的简单,你可以在一周只能掌握它,一月内开发出一个功能丰富的网站。发展至今php其实已经完全不再是一门简单的语言了,php的功能保罗万象,常用的操作系统功能,如进程管理,信号,网络通信,多线程,ptrace、inotify、加密解密、压缩都有相应的扩展实现,而且php可以很好的与c/c 互相调用。php提供了zendapi,可以很方便地使用c来扩充php的功能。语言特性方面php5.4提供的namespace,phar打包,composer依赖管理,trait,完整的面向对象编程语法,强大的魔术方法和常量,字符串与函数类对象直接转换,闭包和匿名函数等丰富的语言特性。在后端开发方面强大到堪比java,c#,但开发效率更高。
php对比node.js的优势
1、php开发效率更高
php比node.js更简单直接,这一点有点像c了。使用php开发一个功能,几乎是所有语言中效率最高的,没有之一。
2、php程序员更多
php因为比较容易入门的原因,程序员数量远超其他语言。其他语言程序员也有很大一部分会php。
3、php开源项目多
php有大量开源的项目,有各种第三方库
node.js最大的特色之一是内置了异步高性能的socket server/client实现,在此基础上提供了内置的web服务器。php里也有类似的神器,那就是swoole扩展。使用swoole扩展完全可以开发出一个高性能安全稳定的服务器程序来。丝毫不逊于node.js,而且在某些方面比node.js更强大。
swoole使用c语言编写,以php扩展的方式来运行。swoole的网络io部分基于epoll/kqueue事件循环,是全异步非阻塞的。业务逻辑部分使用多进程同步阻塞方式来运行。这样既保证了server能够应对高并发和大量tcp连接。又保证业务代码仍然可以简单的编写。
swoole对比node.js的优势
1、swoole是原生支持多进程/多线程的
开发者只需要修改一个参数,配置下要启动多少个进程即可。而node.js的网络库本身并没有提供多进程/多线程的实现。开发者需要自行创建进程。或者干脆使用单线程。这样无法充分利用多核。
2、swoole使用消息传递 多worker进程,而不是多线程 共享内存 加锁
,共享内存的性能虽然很好,但存在安全问题,需要读写时加锁。锁的粒度过大会导致只有一个线程在运行。锁太复杂又会有死锁问题。所以开发者需要非常谨慎小心。
传统的
3、swoole的代码编写是同步,而不是嵌套异步回调
node.js的代码如果太复杂,会嵌套多层回调,使代码丧失可读性,程序流程变得很乱。swoole使用了传统linux下半同步半异步多worker的实现方式。业务代码按照同步方式编写,更简单。
swoole也内置了socket客户端的实现,但采用的是同步 并行方式来执行。php本身也提供了socket的功能,但某几个函数存在一些bug,而且比较复杂。swoole内置的客户端类更加安全和简化。
4、swoole内置了node.js所没有的额外特性
如cpu affinity设置,守护进程化,混合udp/tcp多端口监听,多定时器等。
有无成功的案例?
国内某大公司知名sns网站,全球排名200。内部已经使用此方式来开发了。有600多台php语言开发的webserver,200多台php开发的soa服务器。300多台异步事务服务器。
20 楼 2015-11-15 21:31
全篇没有什么 技术分析 ,却直接就把nodejs鄙视了。
作为 phper 我也是笑了!
19 楼 2014-12-24 15:38
java好吗?
我印象中的java web应用笨拙、开发效率低下、资源占用多
非web应用又比不过原生代码
除了vm能在跨平台方面有点想象力,你的应用在多个平台上迁移过么?
运算密集型不是php强项,io密集型 瓶颈就不在语言而在架构
我可以负责任地说国内java ee应用没几个速度快的,都死慢死慢
为啥,大量不懂基本原理的java毕业生涌入人才市场 代码烂到你看了都想吐
18 楼 2014-05-26 15:00
现在还是。
应该是fastcgi模式吧
17 楼 2014-01-09 10:45
任何程序,使用cluster都可以利用多核
16 楼 2013-08-08 12:28
15 楼 2013-08-05 11:23
你有看过swoole的代码否?你有真正了解swoole的运行机制么?
没有调查就没有发言权,喷也要喷的的技术含量先。
14 楼 2013-08-05 11:01
哈哈 笑死人了~~~~
是开发效率,当然也要因人而异,因水平而异
13 楼 2013-08-05 10:56
12 楼 matyhtf 2013-08-05 10:21
11 楼 2013-08-05 09:47
10 楼 matyhtf 2013-08-05 09:32
现在还是。
9 楼 2013-08-05 09:31
哈哈 笑死人了~~~~
8 楼 matyhtf 2013-08-05 09:30
但使用swoole开发的server可以使用连接池。
7 楼 2013-08-03 12:38
现在还是。
6 楼 2013-08-03 12:03
现在还是。
5 楼 2013-08-03 11:19
cer 微笑不语
4 楼 2013-08-03 09:09
3 楼 2013-08-02 20:25
2 楼 2013-08-02 18:50
1 楼 2013-08-02 17:53