阅读更多

13顶
1踩

编程语言

原创新闻 Node.js的颠覆者:PHP的Swoole扩展

2013-08-02 15:31 by 正式记者 matyhtf 评论(20) 有37100人浏览

最近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多台异步事务服务器。

 

Swoole项目地址:

https://github.com/matyhtf/swoole

13
1
评论 共 20 条 请登录后发表评论
20 楼 qq996150938 2015-11-15 21:31
你吹大了,本文写的毫无中心,毫无说服力,欠骂的文档。写作水平底下。

全篇没有什么 技术分析 ,却直接就把nodejs鄙视了。

作为 phper 我也是笑了!
19 楼 opaquefog 2014-12-24 15:38
7454103 写道
javaer  微笑路过!

Java好吗?
我印象中的java web应用笨拙、开发效率低下、资源占用多
非web应用又比不过原生代码
除了vm能在跨平台方面有点想象力,你的应用在多个平台上迁移过么?
运算密集型不是php强项,io密集型 瓶颈就不在语言而在架构

我可以负责任地说国内java ee应用没几个速度快的,都死慢死慢
为啥,大量不懂基本原理的java毕业生涌入人才市场 代码烂到你看了都想吐
18 楼 aa2071518 2014-05-26 15:00
matyhtf 写道
可以不释放资源的,cli下。
cuippan 写道
哈哈
wsyb 写道
kidneyball 写道
好久没接触PHP,借地方问下,现在PHP还是每个请求进来都重新初始化资源,请求执行完毕后全部丢弃吗?

现在还是。




应该是fastcgi模式吧
17 楼 月影无痕 2014-01-09 10:45
stone_feng 写道
node.js本身可以使用cluster利用多核。。。。这篇文章的小编水平确实有限。


任何程序,使用cluster都可以利用多核
16 楼 闫老三 2013-08-08 12:28
我也微笑路过
15 楼 shenzhe 2013-08-05 11:23
fjjiaboming 写道
哪个2货 推销PHP  吹到天了.


你有看过swoole的代码否?你有真正了解swoole的运行机制么?

没有调查就没有发言权,喷也要喷的的技术含量先。
14 楼 yearnfar 2013-08-05 11:01
fengyuan1314 写道
"几乎是所有语言中效率最高的,没有之一"
哈哈 笑死人了~~~~

是开发效率,当然也要因人而异,因水平而异
13 楼 yearnfar 2013-08-05 10:56
PHPer顶一个
12 楼 matyhtf 2013-08-05 10:21
没有说node.js不可以利用多核,但是需要开发者额外来写代码。swoole的使用完全不需要开发这来管理进程的创建与回收,这些swoole内核已经帮你做好了。

stone_feng 写道
node.js本身可以使用cluster利用多核。。。。这篇文章的小编水平确实有限。

11 楼 stone_feng 2013-08-05 09:47
node.js本身可以使用cluster利用多核。。。。这篇文章的小编水平确实有限。
10 楼 matyhtf 2013-08-05 09:32
可以不释放资源的,cli下。
cuippan 写道
哈哈
wsyb 写道
kidneyball 写道
好久没接触PHP,借地方问下,现在PHP还是每个请求进来都重新初始化资源,请求执行完毕后全部丢弃吗?

现在还是。


9 楼 fengyuan1314 2013-08-05 09:31
"几乎是所有语言中效率最高的,没有之一"
哈哈 笑死人了~~~~
8 楼 matyhtf 2013-08-05 09:30
fastcgi或者mod_php还是这样的。
但使用Swoole开发的Server可以使用连接池。

kidneyball 写道
好久没接触PHP,借地方问下,现在PHP还是每个请求进来都重新初始化资源,请求执行完毕后全部丢弃吗?

7 楼 cuippan 2013-08-03 12:38
哈哈
wsyb 写道
kidneyball 写道
好久没接触PHP,借地方问下,现在PHP还是每个请求进来都重新初始化资源,请求执行完毕后全部丢弃吗?

现在还是。

6 楼 wsyb 2013-08-03 12:03
kidneyball 写道
好久没接触PHP,借地方问下,现在PHP还是每个请求进来都重新初始化资源,请求执行完毕后全部丢弃吗?

现在还是。
5 楼 Pontifex 2013-08-03 11:19
7454103 写道
javaer  微笑路过!

cer 微笑不语
4 楼 fjjiaboming 2013-08-03 09:09
哪个2货 推销PHP  吹到天了.
3 楼 kidneyball 2013-08-02 20:25
好久没接触PHP,借地方问下,现在PHP还是每个请求进来都重新初始化资源,请求执行完毕后全部丢弃吗?
2 楼 jjcang 2013-08-02 18:50
读过swoole的代码,结构很不错。
1 楼 7454103 2013-08-02 17:53
javaer  微笑路过!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Node.js的颠覆者:PHP的Swoole扩展 (转载)

    最近2年Node.js很火,异步与协程是网络开发方面热门的话题。在追求新技术的同时,也应该反思下这里面存在的陷阱。Node.js确实是一门有趣好玩有个性的语言和技术,动态性,全异步回调的方式,闭包等等特性。值得所有...

  • Node.js 新特性将颠覆 AI、物联网等更多惊人领域

    点击蓝字 「前端小苑」关注我新版 Node.js 的特性并非这个平台此前的那些等闲卖点。Node.js 主要以其迅速和简洁而闻名。这也是为何那么多公司都愿意尝试 Node.js。然而,随...

  • [译] Node.js 新特性将颠覆 AI、物联网等更多惊人领域

    原文地址:New Node.js 12 features will see it disrupt AI, IoT and more surprising areas 原文作者:Adam Polak 译文出自:掘金翻译计划 ...译者:Badd ...Node.js 新特性将颠覆 AI、物联网等更多...

  • Swoole:重新定义PHP

    PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole可以广泛应用于互联网、...

  • 给各位PHP程序员十点未来的建议

    PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js 、 GO 、 Python 不断地在挑战 PHP 的地位。这些技术的推动者非常热衷于唱衰 PHP , PHP 语言...

  • 2019年PHP程序员未来路在何方

    PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js 、 GO 、 Python 不断地在挑战 PHP 的地位。这些技术的推动者非常热衷于唱衰 PHP , PHP 语言...

  • 除了学习PHP,还应该学什么?

    Node.js 的异步回调 Swoole 有,Go语言的协程 Swoole 也有,这完全颠覆了对 PHP 的认知。 使用 Swoole PHP 可以实现常驻内存的 Server 程序,可以实现 TCP 、 UDP 异步网络通信的编程开发。 过去PHP只能做一个 Web ...

  • 除了学习php,你还应该学什么?

    PHP 语言之所以能有今天的地位,得益于PHP语言设计者一直遵从实用主义,将技术的复杂性隐藏在底层。PHP 语言入门简单,容易掌握,程序健壮性好,不容易出现像 Java 、 C++ 等其他语言那样复杂的问题,如内存泄漏和 ...

  • PHP 是最好的语言?关于 PHP 开发未来的 6 点建议

    抛开玩笑梗,认真来说,PHP 的确称得上最好的语言之一。首先,PHP 入门简单,容易掌握,对新手友好,而且程序...PHP 官方提供的标准库非常强大,各种功能函数包括MySQL、Memcache、Redis、GD图形库、CURL、XML、JS...

  • 好文分享-php学习之路

    PHP 从诞生到现在已经有 20 多年历史,从 Web 时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js 、 GO 、 Python 不断地在挑战 PHP 的地位。这些技术的推动者非常热衷于唱衰 PHP , PHP ...

  • 初识swoole

    Node.js 的异步回调 Swoole 有,Go语言的协程 Swoole 也有,这完全颠覆了对 PHP 的认知。使用 Swoole PHP 可以实现常驻内存的 Server 程序,可以实现 TCP 、 UDP 异步网络通信的编程开发。过去PHP只能做一个 Web ...

  • 前锋php人工智能_人工智能除了学习php,还应该学什么?

    Composer第一点就要提 Composer ,自从 Composer 出现后,PHP 的依赖管理可以变得非常简单。程序内依赖一些类库和框架,直接使用 Composer 引入即可,通过使用 composer update 安装依赖的包。解决了过去加载外部库...

  • 【java毕业设计】智慧社区教育服务门户.zip

    有java环境就可以运行起来 ,zip里包含源码+论文+PPT, 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上

  • 基于selenium的携程机票爬虫资料齐全+详细文档+高分项目+源码.zip

    【资源说明】 基于selenium的携程机票爬虫资料齐全+详细文档+高分项目+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

  • 【java毕业设计】智慧社区宠物管理系统(源代码+论文+PPT模板).zip

    zip里包含源码+论文+PPT,有java环境就可以运行起来 ,功能说明: 文档开篇阐述了随着计算机技术、通信技术和网络技术的快速发展,智慧社区门户网站的建设成为了可能,并被视为21世纪信息产业的主要发展方向之一 强调了网络信息管理技术、数字化处理技术和数字式信息资源建设在国际竞争中的重要性。 指出了智慧社区门户网站系统的编程语言为Java,数据库为MYSQL,并实现了新闻资讯、社区共享、在线影院等功能。 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。

  • 免费下载:Civil War (Stuart Moore)_xVBgd.zip

    免费下载:Civil War (Stuart Moore)_xVBgd.zip

  • JSP基于WEB的图书馆借阅系统的设计与实现(源代码+论文)(2024pw).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

  • 免费下载:Spider-Man (Stefan Petrucha)_2pBuA.zip

    免费下载:Spider-Man (Stefan Petrucha)_2pBuA.zip

  • jj视频合并程序代码QZQ.txt

    jj视频合并程序代码QZQ

Global site tag (gtag.js) - Google Analytics