swoole不是php,Swoole
## Swoole
php代碼只是個(gè)表現(xiàn)形式,程序最終是運(yùn)行在內(nèi)存中的進(jìn)程,內(nèi)存中一種東西,代碼只是一種形式而已。
代碼只是一個(gè)形式,以一種方式來創(chuàng)建一個(gè)運(yùn)行在內(nèi)存中的程序,所以Swoole的php腳本代碼只是啟動(dòng)進(jìn)程的方式而已,這個(gè)php腳本只是這種啟動(dòng)方式的載體而已(所以理論上不使用php代碼,使用任何代碼都可以,使用php只是因?yàn)镾woole本身就是php的擴(kuò)展,用php代碼來啟動(dòng)更親切,更加的方便而已),運(yùn)行后你再刪掉腳本文件都沒關(guān)系,因?yàn)榇a只是形式,只是為了啟動(dòng)進(jìn)程而已。
這么來看,任何程序的代碼都是這樣的,比如PHP腳本,你寫了它,只是一種形式而已,運(yùn)行時(shí)它被加載到內(nèi)存了,此時(shí)你可以刪除它都沒問題的,內(nèi)存中的程序不會(huì)受影響,你寫的代碼只是描述了如何生成內(nèi)存中的程序而已,所以你要明白,你寫的代碼只是一種形式的體驗(yàn)而已,最終運(yùn)行的是加載到內(nèi)存中的程序。
>[danger] 站在這個(gè)角度考慮,那么編程語言是不存在的,萬物是不存在的,不過不要想太多,而成為[民間哲學(xué)家](https://segmentfault.com/q/1010000009586182)。
傳統(tǒng)web只是每次都需要調(diào)用腳本創(chuàng)建進(jìn)程,而Swoole一般只是常駐服務(wù),所以會(huì)更明顯的體會(huì)到這點(diǎn)。
* * * * *
### 代碼的本質(zhì)
對(duì)計(jì)算機(jī)來說,代碼本身并不重要,對(duì)人來說,代碼怎么寫才重要(所以規(guī)范很重要)。
對(duì)計(jì)算機(jī)來說,代碼只是工作指令。對(duì)人來說,代碼是解決問題的邏輯思維。
代碼中應(yīng)當(dāng)有你的思考,思想,代碼是有靈魂的,好的代碼優(yōu)雅簡(jiǎn)潔,是能從中發(fā)現(xiàn)真善美的。
計(jì)算機(jī)只是工具,代碼是我們與工具打交道的方式。
* * * * *
### 參考
**php的運(yùn)行模式和生命周期**
[Laravel的核心概念 - SegmentFault](https://segmentfault.com/p/1210000007162144)
[為什么Swoole可以加速php - daryl的技術(shù)天地 - SegmentFault](https://segmentfault.com/a/1190000009486485)
* * * * *
[關(guān)于PHP協(xié)程與阻塞的思考](http://mp.weixin.qq.com/s/WxcP_ghWyY3kWoPi_8dC8w)
* * * * *
[談編程 · php筆記 · 看云](https://www.kancloud.cn/xiak/php-node/500811)
[Golang在php的web開發(fā)中,可以替代哪些應(yīng)用場(chǎng)景? - 知乎](https://www.zhihu.com/question/265388870/answer/293319812)
> **【短生命周期+同步】** 的PHP-FPM 和 **【長(zhǎng)生命周期(邏輯內(nèi)存常駐)+同步/異步】** 的Swoole聯(lián)合開發(fā).
[Just for fun——Slim借力Swoole - Salamander - SegmentFault](https://segmentfault.com/a/1190000013070940)
[workerman / 小談PHP中的幾種運(yùn)行模式 - 掘金](https://juejin.im/post/5ac70b11f265da239e4e5132)
[ThinkPhp5與Swoole定時(shí)任務(wù)實(shí)踐 · 看云](https://www.kancloud.cn/dapeng235/thinkphp5_swoole_timer)
* * * * *
> **理論上其他的同步阻塞 PHP 框架,如 Laravel 、Yii **,都可以實(shí)現(xiàn)只修改底層兼容 Swoole 2.x 協(xié)程,實(shí)現(xiàn)項(xiàng)目代碼無縫切換協(xié)程模式。拭目以待。by:[韓天峰-Rango的微博_微博](https://weibo.com/hantianfeng?refer_flag=1005055014_&is_hot=1#1523957726058)
* * * * *

> 又搞定一個(gè)新特性,在 Swoole 協(xié)程中**死循環(huán)向某個(gè)連接發(fā)送數(shù)據(jù)**,會(huì)導(dǎo)致緩存區(qū)塞滿。之前的處理邏輯,為了避免服務(wù)器內(nèi)存吃光,超過內(nèi)存緩存區(qū)后會(huì)立即返回 false 。現(xiàn)在用協(xié)程實(shí)現(xiàn)了自動(dòng)調(diào)度,緩存區(qū)滿的時(shí)候自動(dòng) yield,發(fā)送完成后自動(dòng) resume 協(xié)程繼續(xù)發(fā)送。

> Swoole 的協(xié)程編程體驗(yàn)非常棒。不需要多線程,直接用 go 關(guān)鍵詞開協(xié)程并發(fā)執(zhí)行。
* * * * *
[matyhtf/framework: PHP advanced Web development framework. The built-in application server based on the development of swoole extension.](https://github.com/matyhtf/framework)
> #### SwooleFramework: PHP的高級(jí)開發(fā)框架
>
> 與其他Web框架不同,SwooleFramework是一個(gè)全功能的后端服務(wù)器框架。除了Web方面的應(yīng)用之外,更廣泛的后端程序中都可以使用。
>
> * 內(nèi)置PHP應(yīng)用服務(wù)器,可脫離nginx/php-fpm/apache獨(dú)立運(yùn)行
> * 配置化與資源自動(dòng)工廠,可實(shí)現(xiàn)從配置中創(chuàng)建資源對(duì)象,完全無需new對(duì)象
> * 全面采用命名空間+autoload,代碼中無需任何的include/require
> * 全局注冊(cè)樹,所有資源都掛載到全局樹上,徹底實(shí)現(xiàn)資源的單例管理和懶加載
> * 全棧框架,提供了數(shù)據(jù)庫操作,模板,Cache,日志,隊(duì)列,上傳管理,用戶管理等幾乎所有的功能
>
> PHP版本需求: PHP5.4/PHP5.5/PHP5.6/PHP7.0/PHP7.1,不支持PHP5.3
#### [Swoole框架](https://wiki.swoole.com/wiki/index/prid-2)
基于Swoole擴(kuò)展開發(fā)的PHP web server&應(yīng)用服務(wù)器, 內(nèi)置框架。提供統(tǒng)一注冊(cè)樹,數(shù)據(jù)庫操作,模板,Cache,日志,隊(duì)列,上傳管理,用戶管理等豐富的功能特性。
swoole框架相比apache/fpm,主要是節(jié)省PHP框架和全局對(duì)象每次請(qǐng)求創(chuàng)建銷毀帶來的性能損耗。如果你的PHP代碼是裸echo的方式,swoole框架并沒有性能優(yōu)勢(shì)。
swoole框架給程序員提供了最大的空間,與http請(qǐng)求無關(guān)的全局對(duì)象只需要構(gòu)造一次。程序中還可以對(duì)某些對(duì)象和數(shù)據(jù)進(jìn)行緩存控制。
* * * * *
[mixstart/mixphp: 輕量 PHP 框架,基于 Swoole 的常駐內(nèi)存型 PHP 高性能框架 (開發(fā)文檔完善)](https://github.com/mixstart/mixphp)
> #### 與傳統(tǒng) MVC 框架比較
>
> MixPHP 與傳統(tǒng) PHP 的 Web 框架非常不同,可以不需要 Web 服務(wù)器(Apache/PHP-FPM),框架自帶基于 SwooleServer 開發(fā)的 mix-httpd 高性能 HTTP 服務(wù)器,**傳統(tǒng)的 PHP 應(yīng)用程序中腳本結(jié)束后,所有的對(duì)象在請(qǐng)求后都將銷毀,而 mix-httpd 不同,框架組件對(duì)象常駐于內(nèi)存,減少對(duì)象反復(fù)創(chuàng)建銷毀的性能損失,具有傳統(tǒng)框架無法比擬的性能優(yōu)勢(shì)。**
>
> MixPHP 參考了 Yii2 框架的組件設(shè)計(jì)思想,又舍棄了 Yii2 與前端強(qiáng)耦合的缺點(diǎn),使得整個(gè)框架如同 CodeIgniter 一樣小巧別致,MixPHP 同時(shí)擁有 Yii2 的架構(gòu)思想、Swoole 的高性能與更后端開發(fā)能力。
[easy-swoole/easyswoole: use swoole easily just like echo "hello world";](https://github.com/easy-swoole/easyswoole)
> EasySwoole 是一款基于Swoole Server 開發(fā)的常駐內(nèi)存型的分布式PHP框架,專為API而生,擺脫傳統(tǒng)PHP運(yùn)行模式在進(jìn)程喚起和文件加載上帶來的性能損失。EasySwoole 高度封裝了 Swoole Server 而依舊維持 Swoole Server 原有特性,支持同時(shí)混合監(jiān)聽HTTP、自定義TCP、UDP協(xié)議,讓開發(fā)者以最低的學(xué)習(xí)成本和精力編寫出多進(jìn)程,可異步,高可用的應(yīng)用服務(wù)
[為什么 PHP 程序員應(yīng)該學(xué)習(xí)使用 Swoole](https://www.toutiao.com/a6568284224787317251/?tt_from=weixin&utm_campaign=client_share×tamp=1529319824&app=news_article_lite&utm_source=weixin&iid=33124962994&utm_medium=toutiao_android&wxshare_count=1)
> 【常駐內(nèi)存】目前傳統(tǒng) PHP框架,在處理每個(gè)請(qǐng)求之前,都要做一遍加載框架文件、配置的操作。這可能已經(jīng)成為性能問題的一大原因,而使用 Swoole 則沒有這個(gè)問題,一次加載多次使用。
[top-think/think-swoole at 2.0](https://github.com/top-think/think-swoole/tree/2.0)(這樣的東西肯定用擴(kuò)展去做,而不是寫在框架里面)
* * * * *
[ThinkPHP 5.1 Swoole 快速上手指南 · ThinkPHP5.1 Swoole上手指南 · 看云](https://www.kancloud.cn/thinkphp/think-swoole/content)
[easySwoole|swoole框架|swoole拓展|swoole](https://www.easyswoole.com/)
我也是用swoole框架,感覺確實(shí)快..響應(yīng)都是在100ms內(nèi)..代碼多注意點(diǎn)就是,畢竟自己管理內(nèi)存,進(jìn)程..
用于線上項(xiàng)目的話,內(nèi)存泄露,mysql斷線,服務(wù)崩了也只能重啟,畢竟不能用die的,調(diào)試全部是var_dump,sleep函數(shù)也要慎用,全局變量自己要記得銷毀.其他的多注意點(diǎn)就是
[聽過PHP定時(shí)器嗎?](https://mp.weixin.qq.com/s/TV8Qe0kvTCasz6mDIIA92w)
[swoolefy](https://github.com/bingcool/swoolefy)(swoolefy是一個(gè)基于swoole實(shí)現(xiàn)的輕量級(jí)、高性能、協(xié)程級(jí)、開放性的API應(yīng)用服務(wù)框架)
[PHP 不會(huì)死 —— 我們?nèi)绾问褂?Golang 來阻止 PHP 走向衰亡](https://mp.weixin.qq.com/s/x1QSy6NxlLE_Yv9wX6et2Q)
[來,控制一下 Goroutine 的并發(fā)數(shù)量](https://mp.weixin.qq.com/s/LyBp8D4ri32Yv2vTwpb3xA)
[https://www.easyswoole.com/Manual/3.x/Cn/_book/noobCourse/Coroutine.html](https://www.easyswoole.com/Manual/3.x/Cn/_book/noobCourse/Coroutine.html)
[nginx、swoole高并發(fā)原理初探](https://mp.weixin.qq.com/s/_gR3hXWnzTqM87ThVYeCww)
* * * * *
[goproxy/README_ZH.md at master · snail007/goproxy](https://github.com/snail007/goproxy/blob/master/README_ZH.md)
> 程序內(nèi)部能設(shè)置信號(hào)處理方式,實(shí)現(xiàn)后臺(tái)運(yùn)行。
>
> 守護(hù)運(yùn)行不是后臺(tái)運(yùn)行的意義,而是有另一個(gè)監(jiān)控進(jìn)程,監(jiān)控著目標(biāo)進(jìn)程的運(yùn)行情況,以保證目標(biāo)進(jìn)程的運(yùn)行,相當(dāng)于是守護(hù)的意思。
#### 后臺(tái)運(yùn)行
默認(rèn)執(zhí)行proxy之后,如果要保持proxy運(yùn)行,不能關(guān)閉命令行.
如果想在后臺(tái)運(yùn)行proxy,命令行可以關(guān)閉,只需要在命令最后加上--daemon參數(shù)即可.
比如:
`./proxy http -t tcp -p "0.0.0.0:38080" --daemon`
#### 守護(hù)運(yùn)行
守護(hù)運(yùn)行參數(shù)--forever,比如:?`proxy http --forever`?,
proxy會(huì)fork子進(jìn)程,然后監(jiān)控子進(jìn)程,如果子進(jìn)程異常退出,5秒后重啟子進(jìn)程.
該參數(shù)配合后臺(tái)運(yùn)行參數(shù)--daemon和日志參數(shù)--log,可以保障proxy一直在后臺(tái)執(zhí)行不會(huì)因?yàn)橐馔馔顺?
而且可以通過日志文件看到proxy的輸出日志內(nèi)容.
比如:?`proxy http -p ":9090" --forever --log proxy.log --daemon`
* * * * *
last update:2018-2-2 15:13:24
總結(jié)
以上是生活随笔為你收集整理的swoole不是php,Swoole的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: after oracle alter,关
- 下一篇: 如何用php获取网页表格,PHP获取网页