php+swoole
swoole官網(wǎng):www.swoole.com
Swoole:面向生產(chǎn)環(huán)境的?PHP?異步網(wǎng)絡(luò)通信引擎
?是PHP開(kāi)發(fā)人員可以編寫(xiě)高性能的異步并發(fā)?TCP,UDP,UnixSocket,HTTP,WebSocket服務(wù)。
?Swoole可以廣泛的應(yīng)用于互聯(lián)網(wǎng),移動(dòng)通信,企業(yè)軟件,云計(jì)算,網(wǎng)絡(luò)游戲,物聯(lián)網(wǎng)(IOT),車(chē)聯(lián)網(wǎng),智能家居等領(lǐng)域。使用PHP+Swoole作為網(wǎng)絡(luò)通信框架,可以使企業(yè)IT
?研發(fā)團(tuán)隊(duì)的效率大大提升,更專(zhuān)注于開(kāi)發(fā)創(chuàng)新產(chǎn)品。
如何學(xué)習(xí)swoole
??查看文檔
??實(shí)現(xiàn)swoole特性的功能點(diǎn)
??多看看其他現(xiàn)有的swoole案例代碼(github,開(kāi)源中國(guó))
必須要學(xué)的源碼安裝:
????PHP7的源碼安裝
??????從官網(wǎng)下下來(lái)的包?php-7.2.4.tar.bz2
yum?–y install bzip2ls
??????tar -xjvf php-7.2.4.tar.bz2
?????1.編譯部分:
??????里面的?./configure?是shell腳本用來(lái)編輯安裝的,需要工具gcc, autoconfig
??????yum install gcc gcc-c++ -y
??????yum install autoconf -y
yum?-y?install?libxml2
yum?-y?install?libxml2-devel
?
yum?-y?install?openssl
yum?-y?install?openssl-devel
yum?-y?install?curl
yum?-y?install?curl-devel
yum?-y?install?libjpeg
yum?-y?install?libjpeg-devel
yum?-y?install?libpng
yum?-y?install?libpng-devel
yum?-y?install?freetype
yum?-y?install?freetype-devel
yum?-y?install?pcre
yum?-y?install?pcre-devel
yum?-y?install?libxslt
yum?-y?install?libxslt-devel
yum?-y?install?bzip2
yum?-y?install?bzip2-devel
?
上面的安裝完成后執(zhí)行配置
./configure --prefix=/usr/local/php --with-curl --with-freetype-dir?--with-gd --with-gettext --with-iconv-dir?--with-kerberos --with-libdir=lib64 --with-libxml-dir?--with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir?--with-jpeg-dir?--with-xmlrpc --with-xsl --with-zlib --with-bz2 --with-mhash --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-xml --enable-zip
實(shí)際上這里的配置項(xiàng)比上述還多,可以使用?./configure --help?命令查看所有選項(xiàng),這里注意在php7中--with-mysql原生支持已經(jīng)不存在了,操作都變成mysqli或者pdo了;以上這些選項(xiàng)在正常的php開(kāi)發(fā)中完全夠用了,后期如果需要,可以選擇手動(dòng)開(kāi)啟相應(yīng)的模塊
?
2.?構(gòu)建部分:
???????構(gòu)建命令:make
???????完成后檢測(cè):make test ?。需要耗費(fèi)一點(diǎn)時(shí)間
?????3.安裝
???????make install
???編輯當(dāng)前用戶路徑環(huán)境變量:
??????vim ~/.bash_profile
??????里面exprot PATH后面加上:
????????alias php=/usr/local/php/bin/php
??????保存,然后
??????source ~/.bash_profile
??????后面用php執(zhí)行器就?php -v
php的默認(rèn)安裝位置上面已經(jīng)指定為/usr/local/php,接下來(lái)配置相應(yīng)的文件:
cp?php.ini-development /usr/local/php/lib/php.ini
cp?/usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp?sapi/fpm/php-fpm /usr/local/bin
然后設(shè)置php.ini,使用:?vim /usr/local/php/lib/php.ini?打開(kāi)php配置文件找到cgi.fix_pathinfo配置項(xiàng),這一項(xiàng)默認(rèn)被注釋并且值為1,根據(jù)官方文檔的說(shuō)明,這里為了當(dāng)文件不存在時(shí),阻止Nginx將請(qǐng)求發(fā)送到后端的PHP-FPM模塊,從而避免惡意腳本注入的攻擊,所以此項(xiàng)應(yīng)該去掉注釋并設(shè)置為0
?
設(shè)置完畢保存并退出
另外注意一個(gè)地方就是php.ini配置文件的位置可以在編譯前配置參數(shù)中設(shè)置,編譯參數(shù)可以寫(xiě)成:--with-config-file-path=/usr/local/php 這樣的話php就回去指定的目錄下讀取php.ini配置文件,如果不加這個(gè)參數(shù)默認(rèn)位置就是php安裝目錄下的lib目錄,具體也可以在phpinfo()輸出界面查看,如果php.ini放到其他位置,php讀取不到,那么所有的配置修改后都是不生效的,這點(diǎn)要注意
此時(shí)首先應(yīng)該創(chuàng)建web用戶:(如果已經(jīng)做了這個(gè)就可以跳過(guò),可以是?www)
groupadd www-data
useradd -g www-data www-data
然后網(wǎng)上一些教程說(shuō)讓修改php-fpm.conf添加以上創(chuàng)建的用戶和組,這時(shí)候使用?vim /usr/local/etc/php-fpm.conf?打開(kāi)文件后找不到官方所提示的位置:
?
默認(rèn)情況下etc/php-fpm.d/下有一個(gè)名為www.conf.defalut的配置用戶的文件,執(zhí)行下面命令復(fù)制一個(gè)新文件并且打開(kāi):
cp?/usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
vim /usr/local/etc/php-fpm.d/www.conf
默認(rèn)user和group的設(shè)置為nobody,將其改為www-data,(這個(gè)按創(chuàng)建的用戶和用戶組改)
?
修改完成之后,保存并退出,然后執(zhí)行以下命令啟動(dòng)php-fpm服務(wù):
/usr/local/bin/php-fpm
啟動(dòng)完畢之后,php-fpm服務(wù)默認(rèn)使用9000端口,使用?netstat -tln |?grep?9000?可以查看端口使用情況:
?
9000端口正常使用,說(shuō)明php-fpm服務(wù)啟動(dòng)成功
然后執(zhí)行?vim /usr/local/nginx/nginx.conf?編輯nginx配置文件,具體路徑根據(jù)實(shí)際的nginx.conf配置文件位置編輯,下面主要修改nginx的server {}配置塊中的內(nèi)容,修改location塊,追加index.php讓nginx服務(wù)器默認(rèn)支持index.php為首頁(yè):
然后配置.php請(qǐng)求被傳送到后端的php-fpm模塊,默認(rèn)情況下php配置塊是被注釋的,此時(shí)去掉注釋并修改為以下內(nèi)容:
?
這里面很多都是默認(rèn)的,root是配置php程序放置的根目錄,主要修改的就是fastcgi_param中的/scripts為$document_root
修改完上面的,回到nginx.conf第一行,默認(rèn)是#user nobody; ?這里要去掉注釋改為user www-data;或者user www-data www-data;表示nginx服務(wù)器的權(quán)限為www-data(前面安裝nginx時(shí)就修改為了 user www www,這里可以跳過(guò))
修改完這些保存并退出,然后重啟nginx:
/usr/local/nginx/nginx -s stop/usr/local/nginx/nginx
接下來(lái)編輯一個(gè)測(cè)試的php程序,在nginx下的html目錄下創(chuàng)建test.php文件,打印一下php配置:
<?php
????phpinfo();?>
//裝載地址?http://www.cnblogs.com/freeweb/p/5425554.html
?
?
下面是補(bǔ)充說(shuō)明:
???安裝好的php里面是沒(méi)有php.ini文件的,但是編譯后的文件里面有,從編輯的文件中拷貝過(guò)去
??????cp php.ini-development /usr/local/php/etc/
??????mv php.ini-development ?php.ini
???如果改了php的配置但是沒(méi)有生效,請(qǐng)用
??????php -i |grep php.ini ?查看啟用的是哪里的配置文件
??????Configuration File (php.ini) Path => /usr/local/ php/lib
??????上面是默認(rèn)放置位置,所以說(shuō)要修改位置應(yīng)該在編譯時(shí)指定位置?--
??????mv ./etc/php.ini ?./lib
下載安裝swoole:
??進(jìn)入www.swoole.com點(diǎn)擊下載,然后會(huì)跳轉(zhuǎn)界面,選取克隆下載地址:https://gitee.com/swoole/swoole.git
??linux?上安裝git后:
??git clone https://gitee.com/swoole/swoole.git
??下載后是已經(jīng)解壓好的源碼
??源碼安裝,發(fā)現(xiàn)這里面沒(méi)有?configure,此時(shí)運(yùn)行裝好的phpize
??執(zhí)行命令:/home/work/study/soft/php/bin/phpize
??這是再看,發(fā)現(xiàn)swoole下面有了?configure,還有一些其他改變
??./configure --with-php-config=/home/work/study/soft/php/bin/php-config
??然后?make
??然后?make install
?????出現(xiàn):Installing shared extensions: ????/home/work/study/soft/php/lib/php/extensions/no-debug-non-zts-20170718/
?????這個(gè)路徑說(shuō)的是擴(kuò)展的路徑。
?????進(jìn)入后打印如下:[root@bogon no-debug-non-zts-20170718]# ll
?????????????total 9944
?????????????-rwxr-xr-x. 1 root root 3581556 Apr ?5 01:00 opcache.a
?????????????-rwxr-xr-x. 1 root root 1971952 Apr ?5 01:00 opcache.so
?????????????-rwxr-xr-x. 1 root root 4622688 Apr ?5 09:47 swoole.so
?????所以說(shuō)最終的擴(kuò)展是?.so?文件。
?????如果進(jìn)入?/home/work....?要跳回之前的目錄用: cd -
在swoole源碼安裝包里面有?example,進(jìn)入,這里面都是使用swoole的例子。
????cd server?。?打開(kāi)?echo.php,查看
???直接?php echo.php
???????報(bào)錯(cuò),原因是擴(kuò)展文件的加載還要看php.ini里面的?extension=
???在php.ini中加上?extension=swoole ,然后?php -m?就可以看到加載的模塊swoole了(這里說(shuō)明一下,只有在指定的擴(kuò)展目錄下面有相應(yīng)的.so文件,并且php.ini里面添加了配置,php -m才能查看到該擴(kuò)展)
???再次運(yùn)行?php echo.php
???然后查看此端口:netstat -anp|grep 9501
?????得到結(jié)果:tcp ???????0 ?????0 0.0.0.0:9501 ???????????0.0.0.0:* ??????????????LISTEN ?????32898/php
???ctrl+c?取消掉運(yùn)行程序后再次?netstat -anp|grep 9501 ??發(fā)現(xiàn)沒(méi)有了,消失了
查看端口號(hào):
netstat -anp|grep 9501
telnet 127.0.0.1 9501
來(lái)源:https://blog.csdn.net/birdfish123/article/details/80538974
總結(jié)
以上是生活随笔為你收集整理的php+swoole的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: redis报错(error) LOADI
- 下一篇: Server