最近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多台异步事务服务器。
相关推荐
php7及以上版本 swoole扩展 php7及以上版本 swoole扩展
php swoole 5.0.0扩展包 php swoole 5.0.0扩展包 php swoole 5.0.0扩展包 php swoole 5.0.0扩展包 php swoole 5.0.0扩展包 php swoole 5.0.0扩展包 php swoole 5.0.0扩展包 php swoole 5.0.0扩展包 php swoole 5.0.0...
php_swoole_loader_php56_nzts_x64.dll php_swoole_loader_php70_nzts_x64.dll php_swoole_loader_php71_nzts_x64.dll php_swoole_loader_php72_nzts_x64.dll php_swoole_loader_php73_nzts_x64.dll
编译好的 swoole 4.8.11版本的 swoole.so
php_swoole_loader_php56_nzts_x64.dll、php_swoole_loader_php70_nzts_x64.dll、php_swoole_loader_php71_nzts_x64.dll、php_swoole_loader_php72_nzts_x64.dll、php_swoole_loader_php73_nzts_x64.dll Windows64...
PHP swoole扩展,主要是7.2和7.3两个版本当然其中也包含一些低版本的扩展资源,如果资源不够,低版本的可以去官网进行下载。
Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新...
Swoole Loader扩展安装包,Swoole Loader扩展\Linux64位(非线程安全),Linux64位(线程安全),Windows64位(非线程安全),Windows64位(线程安全),,,,全部5.6-7.3
PHP扩展swoole,PHP7及以上版本可用,用于编译安装,本人亲测有效,centOS6.8,centOS7.0都试过
1、兼容Windows和Linux系统; 2、PHP版本:5.6、7.0、7.1、7.2、7.3; 3、安全版本:【线程安全】和【非线程安全】。
php7安装swoole扩展.txt
swoole-loader.zip
php >= 7.0 配置swoole扩展与redis扩展 ``` **执行顺序** ``` 1. 执行php tastqueue.php,安排任务队列queue。 2. swoole启动分布式任务,每五分钟会执行一次。 3. QueryList采集queue队列,将整理好的数据入库 ``` ...
PHP 用的swoole loader扩展文件,Linux版的包含5.6/7.0/7.1/7.2,Windows 64的包含5.6/7.0/7.1,Windows的只支持ApacheIIS
php7.2,swoole_loader 扩展包,亲测可用
fatal error: pcre2.h: No such file or directory 27 | #include "pcre2.h" 安装swoole遇到错误,把pcre2.h 放到、usr/include下
mv swoole-src* swoole-src && \ cd swoole-src && \ phpize && \ ./configure \ --enable-coroutine \ --enable-openssl \ --enable-http2 \ --enable-async-redis \ --enable-sockets \ --enable-mysqlnd && \ ...
这是一个服务端使用php(基于swoole扩展)写的多人坦克实时战斗小游戏。功能有:多人战斗,入场排队,排行榜、公用聊天室.系统要求:php7.0,swoole 4.0. 软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动...
这个只支持7.0及以上版本,liunx版本,采用源码安装方式。
Swoole入门的学习笔记,从零开始学Swoole。 持续更新... 项目结构 ├─ Swoole │ ├─ 1.Swoole 启动一个服务,开启了哪些进程和线程? │ ├─ 2.Swoole Timer 的应用 │ ├─ 3.Swoole Task 的应用 │ ├─ 4....