博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js的颠覆者:PHP的Swoole扩展
阅读量:4594 次
发布时间:2019-06-09

本文共 1584 字,大约阅读时间需要 5 分钟。

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

 

但本文将介绍的是一门另外的容易被大家轻视的编程语言:PHP。长期以来PHP都是作为一门为Web开发而生的前端脚本语言。PHP极其的简单,你可以在一周只能掌握它,一月内开发出一个功能丰富的网站。发展至今PHP其实已经完全不再是一门简单的语言了,PHP的功能保罗万象,常用的操作系统功能,如进程管理,信号,网络通信,多线程,ptrace、inotify、加密解密、压缩都有相应的扩展实现,而且PHP可以很好的与C/互相调用。PHP提供了ZendAPI,可以很方便地使用C来扩充PHP的功能。语言特性方面PHP5.4提供的namespae,phar打包,omposer依赖管理,Trait,完整的面向对象编程语法,强大的魔术方法和常量,字符串与函数类对象直接转换,和匿名函数等丰富的语言特性。在后端开发方面强大到堪比Java,C#,但开发效率更高。

 

PHP对比Node.js的优势

1、PHP开发效率更高

PHP比更简单直接,这一点有点像C了。使用PHP开发一个功能,几乎是所有语言中效率最高的,没有之一。

2、PHP程序员更多

PHP因为比较容易入门的原因,程序员数量远超其他语言。其他语言程序员也有很大一部分会PHP。

 

3、PHP开源项目多

PHP有大量开源的项目,有各种第三方库

 

Node.js最大的特色之一是内置了异步高性能的Socket Server/Client实现,在此基础上提供了内置的Web。PHP里也有类似的神器,那就是扩展。使用扩展完全可以开发出一个高安全稳定的服务器程序来。丝毫不逊于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的代码编写是同步,而不是嵌套异步回调

的代码如果太复杂,会嵌套多层回调,使代码丧失可读性,程序流程变得很乱。使用了传统下半同步半异步多Worker的实现方式。业务代码按照同步方式编写,更简单。

也内置了Soket客户端的实现,但采用的是同步+并行方式来执行。PHP本身也提供了soket的功能,但某几个函数存在一些bug,而且比较复杂。Swoole内置的客户端类更加安全和简化。

 

4、swoole内置了Node.js所没有的额外特性

如CPU Affinity设置,守护进程化,混合UDP/TCP多端口监听,多定时器等。

 

有无成功的案例?

国内某大公司知名SNS网站,全球排名200。内部已经使用此方式来开发了。有600多台PHP语言开发的WebServer,200多台PHP开发的SOA服务器。300多台异步事务服务器。

转载于:https://www.cnblogs.com/codingwang/p/3993438.html

你可能感兴趣的文章
JQuery和Js中,如何让ajax执行完后再继续往下执行?(已解决,示例)
查看>>
VMWare12pro安装Centos 6.9教程
查看>>
Spark笔记之使用UDF(User Define Function)
查看>>
区间DP UVA 10453 Make Palindrome
查看>>
JavaScript系列教程(七):函数
查看>>
江中微型统计分析软件V1.0版本完成
查看>>
彻底搞懂CNN中的卷积和反卷积
查看>>
iOS中画各种图形
查看>>
javascript中的面向对象
查看>>
VirtualBox 下 CentOS6.5 网络配置(NAT) (公司内部用)
查看>>
面向对象三大基本特性,五大基本原则
查看>>
User32.dll 函数的相关方法整理
查看>>
Bootstarp 水平垂直居中
查看>>
LInux Centos7 重装yum
查看>>
HDU 3802Ipad,IPhone
查看>>
高德坐标转百度坐标并导航
查看>>
mpvue配合less
查看>>
查询一个表的不同数据,显示到一个表
查看>>
Unity随手记
查看>>
Swagger入门教程
查看>>