天天看點

php+swoole

swoole官網:www.swoole.com

Swoole:面向生産環境的 PHP 異步網絡通信引擎

 是PHP開發人員可以編寫高性能的異步并發 TCP,UDP,UnixSocket,HTTP,WebSocket服務。

 Swoole可以廣泛的應用于網際網路,移動通信,企業軟體,雲計算,網絡遊戲,物聯網(IOT),車聯網,智能家居等領域。使用PHP+Swoole作為網絡通信架構,可以使企業IT

 研發團隊的效率大大提升,更專注于開發創新産品。

如何學習swoole

  檢視文檔

  實作swoole特性的功能點

  多看看其他現有的swoole案例代碼(github,開源中國)

必須要學的源碼安裝:

    PHP7的源碼安裝

      從官網下下來的包 php-7.2.4.tar.bz2

yum –y install bzip2ls

      tar -xjvf php-7.2.4.tar.bz2

     1.編譯部分:

      裡面的 ./configure 是shell腳本用來編輯安裝的,需要工具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

上面的安裝完成後執行配置

./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

  實際上這裡的配置項比上述還多,可以使用 ./configure --help 指令檢視所有選項,這裡注意在php7中--with-mysql原生支援已經不存在了,操作都變成mysqli或者pdo了;以上這些選項在正常的php開發中完全夠用了,後期如果需要,可以選擇手動開啟相應的子產品

2. 建構部分:

       建構指令:make

       完成後檢測:make test  。需要耗費一點時間

     3.安裝

       make install

   編輯目前使用者路徑環境變量:

      vim ~/.bash_profile

      裡面exprot PATH後面加上:

        alias php=/usr/local/php/bin/php

      儲存,然後

      source ~/.bash_profile

      後面用php執行器就 php -v

php的預設安裝位置上面已經指定為/usr/local/php,接下來配置相應的檔案:

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

然後設定php.ini,使用: vim /usr/local/php/lib/php.ini 打開php配置檔案找到cgi.fix_pathinfo配置項,這一項預設被注釋并且值為1,根據官方文檔的說明,這裡為了當檔案不存在時,阻止Nginx将請求發送到後端的PHP-FPM子產品,進而避免惡意腳本注入的攻擊,是以此項應該去掉注釋并設定為0

  設定完畢儲存并退出

另外注意一個地方就是php.ini配置檔案的位置可以在編譯前配置參數中設定,編譯參數可以寫成:--with-config-file-path=/usr/local/php 這樣的話php就回去指定的目錄下讀取php.ini配置檔案,如果不加這個參數預設位置就是php安裝目錄下的lib目錄,具體也可以在phpinfo()輸出界面檢視,如果php.ini放到其他位置,php讀取不到,那麼所有的配置修改後都是不生效的,這點要注意

此時首先應該建立web使用者:(如果已經做了這個就可以跳過,可以是 www)

groupadd www-data

useradd -g www-data www-data

  然後網上一些教程說讓修改php-fpm.conf添加以上建立的使用者群組,這時候使用 vim /usr/local/etc/php-fpm.conf 打開檔案後找不到官方所提示的位置:

  預設情況下etc/php-fpm.d/下有一個名為www.conf.defalut的配置使用者的檔案,執行下面指令複制一個新檔案并且打開:

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

預設user和group的設定為nobody,将其改為www-data,(這個按建立的使用者和使用者組改)

修改完成之後,儲存并退出,然後執行以下指令啟動php-fpm服務:

/usr/local/bin/php-fpm

  啟動完畢之後,php-fpm服務預設使用9000端口,使用 netstat -tln | grep 9000 可以檢視端口使用情況:

9000端口正常使用,說明php-fpm服務啟動成功

  然後執行 vim /usr/local/nginx/nginx.conf 編輯nginx配置檔案,具體路徑根據實際的nginx.conf配置檔案位置編輯,下面主要修改nginx的server {}配置塊中的内容,修改location塊,追加index.php讓nginx伺服器預設支援index.php為首頁:

然後配置.php請求被傳送到後端的php-fpm子產品,預設情況下php配置塊是被注釋的,此時去掉注釋并修改為以下内容:

這裡面很多都是預設的,root是配置php程式放置的根目錄,主要修改的就是fastcgi_param中的/scripts為$document_root

  修改完上面的,回到nginx.conf第一行,預設是#user nobody;  這裡要去掉注釋改為user www-data;或者user www-data www-data;表示nginx伺服器的權限為www-data(前面安裝nginx時就修改為了 user www www,這裡可以跳過)

  修改完這些儲存并退出,然後重新開機nginx:

/usr/local/nginx/nginx -s stop/usr/local/nginx/nginx

  接下來編輯一個測試的php程式,在nginx下的html目錄下建立test.php檔案,列印一下php配置:

<?php

    phpinfo();?>

//裝載位址 http://www.cnblogs.com/freeweb/p/5425554.html

下面是補充說明:

   安裝好的php裡面是沒有php.ini檔案的,但是編譯後的檔案裡面有,從編輯的檔案中拷貝過去

      cp php.ini-development /usr/local/php/etc/

      mv php.ini-development  php.ini

   如果改了php的配置但是沒有生效,請用

      php -i |grep php.ini  檢視啟用的是哪裡的配置檔案

      Configuration File (php.ini) Path => /usr/local/ php/lib

      上面是預設放置位置,是以說要修改位置應該在編譯時指定位置 --

      mv ./etc/php.ini  ./lib

下載下傳安裝swoole:

  進入www.swoole.com點選下載下傳,然後會跳轉界面,選取克隆下載下傳位址:https://gitee.com/swoole/swoole.git

  linux 上安裝git後:

  git clone https://gitee.com/swoole/swoole.git

  下載下傳後是已經解壓好的源碼

  源碼安裝,發現這裡面沒有 configure,此時運作裝好的phpize

  執行指令:/home/work/study/soft/php/bin/phpize

  這是再看,發現swoole下面有了 configure,還有一些其他改變

  ./configure --with-php-config=/home/work/study/soft/php/bin/php-config

  然後 make

  然後 make install

     出現:Installing shared extensions:     /home/work/study/soft/php/lib/php/extensions/no-debug-non-zts-20170718/

     這個路徑說的是擴充的路徑。

     進入後列印如下:[[email protected] 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

     是以說最終的擴充是 .so 檔案。

     如果進入 /home/work.... 要跳回之前的目錄用: cd -

在swoole源碼安裝包裡面有 example,進入,這裡面都是使用swoole的例子。

    cd server 。 打開 echo.php,檢視

   直接 php echo.php

       報錯,原因是擴充檔案的加載還要看php.ini裡面的 extension=

   在php.ini中加上 extension=swoole ,然後 php -m 就可以看到加載的子產品swoole了(這裡說明一下,隻有在指定的擴充目錄下面有相應的.so檔案,并且php.ini裡面添加了配置,php -m才能檢視到該擴充)

   再次運作 php echo.php

   然後檢視此端口:netstat -anp|grep 9501

     得到結果:tcp        0      0 0.0.0.0:9501            0.0.0.0:*               LISTEN      32898/php

   ctrl+c 取消掉運作程式後再次 netstat -anp|grep 9501   發現沒有了,消失了

檢視端口号:

netstat -anp|grep 9501

telnet 127.0.0.1 9501

來源:https://blog.csdn.net/birdfish123/article/details/80538974