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/
     这个路径说的是扩展的路径。
     进入后打印如下:[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
     所以说最终的扩展是 .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

猜你喜欢

转载自blog.csdn.net/gb4215287/article/details/81067701