亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

swoolefy-基于swoole擴(kuò)展實(shí)現(xiàn)的高性能的常駐內(nèi)存型API和Web應(yīng)用服務(wù)框架

lewinlee / 1553人閱讀

摘要:是一個(gè)基于擴(kuò)展實(shí)現(xiàn)的輕量級(jí)高性能的常駐內(nèi)存型的和應(yīng)用服務(wù)框架高度封裝了,,服務(wù)器,以及基于實(shí)現(xiàn)可擴(kuò)展的服務(wù),同時(shí)支持包方式安裝部署項(xiàng)目。基于實(shí)用,抽象事件處理類,實(shí)現(xiàn)與底層的回調(diào)的解耦,支持同步異步調(diào)用,內(nèi)置等常用組件等。

swoolefy

swoolefy是一個(gè)基于swoole擴(kuò)展實(shí)現(xiàn)的輕量級(jí)高性能的常駐內(nèi)存型的API和Web應(yīng)用服務(wù)框架,高度封裝了http,websocket,udp服務(wù)器,以及基于tcp實(shí)現(xiàn)可擴(kuò)展的rpc服務(wù),同時(shí)支持composer包方式安裝部署項(xiàng)目。基于實(shí)用,swoolefy抽象Event事件處理類,實(shí)現(xiàn)與底層的回調(diào)的解耦,支持同步|異步調(diào)用,內(nèi)置view、Log、session、mysql、redis、memcached、mongodb等常用組件等。

swoolefy是一個(gè)適合學(xué)習(xí)swoole的框架,特別適合中小團(tuán)隊(duì),用過Tp的phper基本都會(huì)用,有過Yii2的經(jīng)驗(yàn)者,那就更容易入手了。同時(shí)swoolefy底層屏蔽了swoole與傳統(tǒng)php-fpm的一些差異,讓大部分的phper使用起來可以像使用php-fpm那樣,輕松入手。

實(shí)現(xiàn)的功能特性

1、輕量級(jí)的框架,實(shí)現(xiàn)路由與調(diào)度,MVC三層,當(dāng)然也可以配置多層
2、支持composer的PSR4規(guī)范和實(shí)現(xiàn)自定義注冊(cè)命名空間
3、支持多協(xié)議,目前支持http,websocket,tcp,udp,以及基于tcp實(shí)現(xiàn)的rpc,開放式的系統(tǒng)接口,可自定義協(xié)議數(shù)據(jù)格式
4、抽象Event的事件處理與底層的事件監(jiān)聽解耦,屏蔽不同協(xié)議之間的應(yīng)用差異,大部分代碼實(shí)現(xiàn)共用
5、實(shí)現(xiàn)超全局變量,IOC,靜態(tài)延遲綁定,組件服務(wù)常駐內(nèi)存化,trait的多路復(fù)用,鉤子事件,單例,工廠模式等
6、簡(jiǎn)單易用的異步任務(wù)管理TaskManager, 定時(shí)器管理TickManager, 內(nèi)存表管理TableManager, 進(jìn)程管理ProcessManager,異常管理,超全局管理
7、靈活多層的配置,配置參數(shù)即可實(shí)現(xiàn)底層已封裝的復(fù)雜功能
8、應(yīng)用對(duì)象的深度復(fù)制,實(shí)現(xiàn)對(duì)象的常駐內(nèi)存,每個(gè)請(qǐng)求只需要從內(nèi)存中復(fù)制應(yīng)用對(duì)象,不需要再重新創(chuàng)建,減少IO消耗
9、封裝View,Log,Mysql,Redis,Mongodb,Swiftmail,Session等常用組件,其他組件根據(jù)業(yè)務(wù)按照約定即可封裝成組件
10、實(shí)現(xiàn)異步半阻塞與全異步非阻塞,EventHander與底層解耦
11、基于inotify實(shí)現(xiàn)自動(dòng)監(jiān)控swoole服務(wù)的文件變動(dòng),實(shí)現(xiàn)worker自動(dòng)reload,智能郵件通知
12、命令行形式高度封裝啟動(dòng)|停止控制的腳本,簡(jiǎn)單命令即可管理整個(gè)框架

項(xiàng)目地址:https://github.com/bingcool/s...,歡迎issue

完善的文檔手冊(cè)

壓測(cè)

環(huán)境:1核2G內(nèi)存的虛擬機(jī),沒有任何調(diào)優(yōu),100并發(fā),100000請(qǐng)求,壓測(cè)輸出hello world
ab -c 100 -n 100000 http://127.0.0.1:81/Index/index
壓測(cè)可以達(dá)到2600qps

應(yīng)用場(chǎng)景

1、swoolefy建議用在單個(gè)或多個(gè)的服務(wù)中,例如異步郵件統(tǒng)發(fā)中心,搜索中心,日志上報(bào)中心,聊天系統(tǒng),實(shí)時(shí)數(shù)據(jù)上報(bào)中心。比如用于實(shí)現(xiàn)了基于solr的產(chǎn)品搜索中心,店慶時(shí)交易系統(tǒng)實(shí)時(shí)訂單以及銷售數(shù)據(jù)看板
2、對(duì)于復(fù)雜的業(yè)務(wù)場(chǎng)景,不建議使用swoolefy,傳統(tǒng)的php-fpm是最好的選擇,當(dāng)然,分拆服務(wù)解耦后,某些服務(wù)可以使用swoolefy來實(shí)現(xiàn)。

配置環(huán)境 安裝實(shí)際環(huán)境(建議)

1、支持php7.0+
2、搭建lnmp環(huán)境,建議使用lnmp一健安裝包,https://lnmp.org, 建議安裝lnmp1.4
3、安裝php必要的擴(kuò)展,本框架需要的擴(kuò)展包括swoole(1.9.17+), swoole_serialize(https://github.com/swoole/swo... inotify, pcntl, posix, zlib, mbstring,可以通過php-m查看是否安裝了這些擴(kuò)展,如果通過lnmp1.4一健安裝包安裝的,已經(jīng)默認(rèn)安裝好這四個(gè)pcntl, posix, zlib, mbstring擴(kuò)展的,只需要在安裝swoole和swoole_serialize, inotify即可,具體安裝過程參考官方文檔

docker容器已經(jīng)配置好的php環(huán)境(開發(fā)測(cè)試)

為了方便開發(fā)和測(cè)試,我打包了一個(gè)基于alpine基礎(chǔ)鏡像搭建的php7.1環(huán)境容器bingcool/php2swoole:2.4,這個(gè)image已經(jīng)非常小了,已經(jīng)安裝所有的必須擴(kuò)展,其中swoole是1.10.4版本,可以通過php --ri swoole 查看信息。
alpine的官網(wǎng):https://pkgs.alpinelinux.org/...

docker pull bingcool/php2swoole:2.4     

已安裝的擴(kuò)展如下:

bz2    
Core    
curl   
date   
fileinfo    
filter    
ftp    
gd    
hash     
imagick    
inotify    
json   
libxml    
mbstring    
mcrypt  
memcached  
mongodb  
mysqlnd   
openssl  
pcntl  
pcre   
PDO   
pdo_mysql  
posix   
readline   
redis   
Reflection   
session   
SimpleXML   
soap    
sockets   
SPL    
standard    
swoole   
swoole_serialize    
xml    
xmlrpc   
Zend OPcache    
zip    
zlib    
[Zend Modules]     
Zend OPcache    
開發(fā)部署

1、如果是自己安裝的php環(huán)境(需在linux環(huán)境下),最好先創(chuàng)建一個(gè)不能登錄偽用戶www,用來執(zhí)行worker進(jìn)程業(yè)務(wù)代碼

useradd www -d /home/www -s /sbin/nologin

則在某一個(gè)web目錄,例如/home/www下

參考文檔

2、使用bingcool/php2swoole容器啟動(dòng)php開發(fā)環(huán)境
下面是簡(jiǎn)單使用,首先是啟動(dòng)容器

docker run -it -d --name dev -p 9502:9502 -v /home/www/:/home/www/ bingcool/php2swoole:2.4   

-v /home/www/:/home/www/ 是將縮主機(jī)的/home/www目錄掛載到容器的/home/www

(1)然后進(jìn)入容器

docker exec -it dev /bin/sh

容器中已經(jīng)安裝好composer和git等工具,然后利用composer方式來安裝部署一個(gè)項(xiàng)目,同樣參考
參考開發(fā)文檔

監(jiān)控程序

1、啟動(dòng)文件自動(dòng)監(jiān)控程序,進(jìn)入項(xiàng)目目錄

當(dāng)前終端啟動(dòng):php start.php start monitor    
守護(hù)進(jìn)程啟動(dòng):php start.php start monitor -d         
停止:php start.php stop monitor      

可以在配置文件swoolefy/protocol/monitor/config.php設(shè)置。監(jiān)控程序自動(dòng)監(jiān)控php的文件變動(dòng),然后swoole的worker自動(dòng)重啟,這個(gè)文件其實(shí)是通過調(diào)用代碼Shell文件夾的swoole_monitor.sh來監(jiān)控9502端口(這個(gè)是swoole的http服務(wù)的默認(rèn)端口),根據(jù)端口監(jiān)聽,可以設(shè)置不同端口,監(jiān)聽不同協(xié)議服務(wù)。
需要注意的是,由于在容器中/home/www的目錄是掛載與縮主機(jī)的,inotify是無法監(jiān)聽到文件變動(dòng)的,所以這個(gè)監(jiān)控程序在容器環(huán)境中是無效的,每次修改代碼必須重啟

http服務(wù)

2、啟動(dòng)swoole的http服務(wù),進(jìn)入進(jìn)入項(xiàng)目目錄

啟動(dòng):php swoolefy start http  
守護(hù)進(jìn)程啟動(dòng):php swoolefy start http -d            
停止:php swoolefy stop http 

默認(rèn)端口是9502,可以在配置文件protocol/http/config.php中更改,同時(shí)對(duì)應(yīng)的protocol/monitor/config.php中對(duì)應(yīng)更改端口,實(shí)現(xiàn)不同的自動(dòng)重載。
注意文件權(quán)限問題

websocket服務(wù)

1、啟動(dòng)swoole的websocket服務(wù),進(jìn)入swoolefy

啟動(dòng):php swoolefy start websocket 
守護(hù)進(jìn)程啟動(dòng):php swoolefy start websocket -d            
停止:php swoolefy stop websocket      

默認(rèn)端口9503,可以在配置文件protocol/websocket/config.php中更改

rpc服務(wù)

1、啟動(dòng)swoole的rpc服務(wù),進(jìn)入進(jìn)入項(xiàng)目目錄

啟動(dòng):php swoolefy start rpc     
守護(hù)進(jìn)程啟動(dòng):php swoolefy start rpc -d        
停止:php swoolefy stop rpc

默認(rèn)端口9504,可以在配置文件protocol/rpc/config.php中更改。

udp服務(wù)

1、啟動(dòng)swoole的rpc服務(wù),進(jìn)入進(jìn)入項(xiàng)目目錄

啟動(dòng):php swoolefy start udp    
守護(hù)進(jìn)程啟動(dòng):php swoolefy start udp -d     
停止:php swoolefy stop udp

默認(rèn)端口9505,可以在配置文件protocol/udp/config.php中更改。

訪問Index

在App/Controller中就可以編碼測(cè)試,基本和thinkphp的mvc那樣操作。
比如在App/Controller/IndexController.php

response->end("hello word!");
    }

}

那么直接在瀏覽器輸入http://ip:9502/Index/index
若需要渲染模板

assign("name","hello word!");
        $this->display("index.html");

}

對(duì)應(yīng)的路由規(guī)則:

controller/action 

如果存在module模塊:

module/controller/action

具體的可以參考App/Controller/的demo

如果需要使用mysql,redis,mongodb這些組件功能,請(qǐng)安裝對(duì)應(yīng)的擴(kuò)展和服務(wù),并在App/Config/config.php中配置。這個(gè)與Yii2的Component相似.

nginx代理

為了使用更好支持的HTTP協(xié)議,建議前端使用nginx作為代理,更多功能可以看proxy模塊來設(shè)置

location / {
            proxy_http_version 1.1;
            proxy_set_header Connection "keep-alive";
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://127.0.0.1:9502;
        }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/28119.html

相關(guān)文章

  • 基于swooleswoolefy實(shí)現(xiàn)類似gowaitGroup多并發(fā)協(xié)程調(diào)度

    摘要:基于實(shí)用,抽象事件處理類,實(shí)現(xiàn)與底層的回調(diào)的解耦,支持協(xié)程調(diào)度,同步異步調(diào)用,全局事件注冊(cè),心跳檢查,異步任務(wù),多進(jìn)程池等,內(nèi)置等常用組件等。 swoolefy是一個(gè)基于swoole實(shí)現(xiàn)的輕量級(jí)高性能的常駐內(nèi)存型的API和Web應(yīng)用服務(wù)框架, 高度封裝了http,websocket,udp服務(wù)器,以及基于tcp實(shí)現(xiàn)可擴(kuò)展的rpc服務(wù), 同時(shí)支持composer包方式安裝部署項(xiàng)目?;趯?shí)...

    ZweiZhao 評(píng)論0 收藏0
  • Easyswoole 源碼學(xué)習(xí)個(gè)人解析 目錄

    摘要:易用穩(wěn)定,本次想通過對(duì)的學(xué)習(xí)和個(gè)人解析,吸收框架的思想和設(shè)計(jì)知識(shí),加強(qiáng)自己對(duì)的認(rèn)知和理解。當(dāng)然,筆者能力水平有限,后續(xù)的文章如有錯(cuò)誤,還請(qǐng)指出和諒解。目錄如下后續(xù)添加文章都會(huì)記錄在此服務(wù)啟動(dòng)過程以及主體設(shè)計(jì)流程源碼解析 前言 swoole是什么?官網(wǎng)的原話介紹是這樣的: Swoole 使用純 C 語言編寫,提供了 PHP 語言的異步多線程服務(wù)器,異步 TCP/UDP 網(wǎng)絡(luò)客戶端,異步 ...

    CoXie 評(píng)論0 收藏0
  • MixPHP:基于 Swoole 常駐內(nèi)存 PHP 框架

    摘要:框架最新源代碼行數(shù)行,因此可以很容易的改造它,成為你們公司的專屬框架。也不同于其他基于的微服務(wù)框架,只聚焦于微服務(wù)治理,定位于開發(fā)的更多領(lǐng)域,覆蓋從初創(chuàng)到億元級(jí)體量的技術(shù)訴求。的授權(quán)全靠用戶自愿購(gòu)買,詳情 MixPHP是什么 MixPHP 是秉承 普及 PHP 常駐內(nèi)存型解決方案,促進(jìn) PHP 往更后端發(fā)展 的理念而創(chuàng)造,采用 Swoole 擴(kuò)展作為底層引擎,圍繞常駐內(nèi)存的方式而設(shè)計(jì),...

    王晗 評(píng)論0 收藏0
  • 后端語言選淺談

    摘要:再往后來,也就是這種以事件循環(huán)常駐內(nèi)存為特點(diǎn)的后端平臺(tái),姑且能算是第四代后端平臺(tái)。 前不久回答了一個(gè)關(guān)于后端語言選型的問題,寫的回答也讓筆者有了很多感觸,因此在這里談?wù)撓伦约簩?duì)后端語言選型的心得體會(huì),姑且算是拋磚引玉,希望大家能分享各自的心得。 后端語言發(fā)展歷史 Web 后端語言的興起是從靜態(tài)網(wǎng)頁向動(dòng)態(tài)網(wǎng)頁的發(fā)展所產(chǎn)生的,最早的動(dòng)態(tài)頁面技術(shù)就是 CGI 技術(shù),將客戶端的輸入交給 CGI...

    xcc3641 評(píng)論0 收藏0
  • 后端語言選淺談

    摘要:再往后來,也就是這種以事件循環(huán)常駐內(nèi)存為特點(diǎn)的后端平臺(tái),姑且能算是第四代后端平臺(tái)。 前不久回答了一個(gè)關(guān)于后端語言選型的問題,寫的回答也讓筆者有了很多感觸,因此在這里談?wù)撓伦约簩?duì)后端語言選型的心得體會(huì),姑且算是拋磚引玉,希望大家能分享各自的心得。 后端語言發(fā)展歷史 Web 后端語言的興起是從靜態(tài)網(wǎng)頁向動(dòng)態(tài)網(wǎng)頁的發(fā)展所產(chǎn)生的,最早的動(dòng)態(tài)頁面技術(shù)就是 CGI 技術(shù),將客戶端的輸入交給 CGI...

    alighters 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

lewinlee

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<