最近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的優點:
一、PHP開發效率更高前端
PHP比Node.js更簡單直接,這一點有點像C了。使用PHP開發一個功能,幾乎是全部語言中效率最高的,沒有之一。
二、PHP程序員更多git
PHP由於比較容易入門的緣由,程序員數量遠超其餘語言。其餘語言程序員也有很大一部分會PHP。
三、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的優點:
一、swoole是原生支持多進程/多線程的github
開發者只須要修改一個參數,配置下要啓動多少個進程便可。而Node.js的網絡庫自己並無提供多進程/多線程的實現。開發者須要自行建立進程。或者乾脆使用單線程。這樣沒法充分利用多核。
二、swoole使用消息傳遞+多Worker進程,而不是多線程+共享內存+加鎖編程
,共享內存的性能雖然很好,但存在安全問題,須要讀寫時加鎖。鎖的粒度過大會致使只有一個線程在運行。鎖太複雜又會有死鎖問題。因此開發者須要很是謹慎當心。
三、swoole的代碼編寫是同步,而不是嵌套異步回調後端
Node.js的代碼若是太複雜,會嵌套多層回調,使代碼喪失可讀性,程序流程變得很亂。Swoole使用了傳統Linux下半同步半異步多Worker的實現方式。業務代碼按照同步方式編寫,更簡單。
Swoole也內置了Socket客戶端的實現,但採用的是同步+並行方式來執行。PHP自己也提供了socket的功能,但某幾個函數存在一些bug,並且比較複雜。Swoole內置的客戶端類更加安全和簡化。
四、swoole內置了Node.js所沒有的額外特性安全
如CPU Affinity設置,守護進程化,混合UDP/TCP多端口監聽,多定時器等。
Swoole項目地址:服務器