swoole入门3-swoole开发环境搭建

2017-08-16 14:04:56 971 思小齐 思小齐

环境依赖

  • 仅支持 Linux、FreeBSD、MacOS 三种操作系统
  • 在Windows平台,可使用CygWin或WSL(Windows Subsystem for Linux)
  • Linux 内核版本 2.3.32 以上
  • gcc4.4 以上版本或者clang
  • 4.x版本起需要gcc-4.8或更高版本, 编译失败请先尝试升级gcc
  • 编译为 libswoole.so 作为 C/C++ 库时需要使用 cmake-2.4 或更高版本
建议使用 Ubuntu14、CentOS7、MAC10.14.0或更高版本的操作系统

PHP版本依赖

  • Swoole-4.x需要 PHP-7.1.0 或更高版本
  • 不依赖 PHP 的 stream、sockets、pcntl、posix、sysvmsg 等扩展。PHP 只需安装最基本的扩展即可

ARM平台(树莓派Raspberry PI)

  • 请使用 1.7.10 或更高版本
  • 使用 GCC 交叉编译
  • 在编译 Swoole 时,需要手工修改 Makefile 去掉 -O2 编译参数

MIPS平台(OpenWrt路由器)

  • 请使用 swoole-1.7.21 或更高版本
  • 使用 GCC 交叉编译

CygWin环境支持(Windows系统)

swoole-1.7.7 增加了对 cygwin 环境的支持,在 Windows 环境下,可以直接使用 cygwin + php 来跑 swoole 程序。
  • 安装 cygwin,并安装 gcc、make、autoconf、php 4个包
  • 下载swoole源码,在 cygwin-shell 中进行 phpize/configure/make/make install
  • 修改 php.ini,加入 swoole.so
cygwin 模式下需要对 PHP 进行简化,去掉不使用的扩展,避免进程占用内存过大,导致 Fork 操作失败

BashOnWindows

Windows 10 系统增加了 Linux 子系统支持,BashOnWindows 环境下也可以使用 swoole。安装命令
    pecl install swoole
    echo 'extension=swoole.so' >> /etc/php/7.0/mods-available/swoole.ini
    cd /etc/php/7.0/cli/conf.d/ && ln -s ../../mods-available/swoole.ini 20-swoole.ini
    cd /etc/php/7.0/fpm/conf.d/ && ln -s ../../mods-available/swoole.ini 20-swoole.ini
  • BashOnWindows 环境下必须关闭 daemonize 选项
  • 需要修改 config.h 关闭 HAVE_SIGNALFD

DockerOnWindows

在 Windows 下开发可以使用 Hyper-V+Docker 来方便的开发 Swoole 应用,安装好 Docker 后再 Settings 里的 Shared Droves 选项里共享代码所在磁盘。然后使用如下命令来快速启动 Docker 容器。
  • e:/path/to 为源码所在路径
  • /app 为容器内路径
  • 在 bash 里执行 cd /app && php server.php

编译安装

 Swoole扩展是按照PHP标准扩展构建的。使用phpize来生成编译检测脚本,./configure来做编译配置检测,make进行编译,make install进行安装。
 
  • 请下载releases版本的swoole,直接从github主干上拉取最新代码可能会编译不过
  • 如无特殊需求, 请务必编译安装swoole的最新版本
  • 如果当前用户不是root,可能没有PHP安装目录的写权限,安装时需要sudo或者su
  • 如果是在git分支上直接git pull更新代码,重新编译前务必要执行make clean

安装准备

  • PHP 7.0或更高版本[7.2.9]
  • Swoole 4.x.0以上版本[4.2.8]
  • redis[4.2.0]
  • mysqli
  • pdo
  • hiredis
  • sockets
  • mysqlnd

编译示例

cd swoole
sudo phpize (找不到,需要指定php的bin下的phpize)
sudo ./configure --with-php-config=php的bin下的php-config --enable-sockets --enable-http2 --enable-async-redis --enable-mysqlnd
sudo make && make install

配置php.ini

编译安装成功后,修改php.ini加入
extension=swoole.so
重启php-fpm
通过php -m或phpinfo()来查看是否成功加载了swoole.so,如果没有可能是php.ini的路径不对,可以使用php --ini来定位到php.ini的绝对路径。

hiredis安装

github地址:https://github.com/redis/hiredis
cd /deps/hiredis
sudo make && make install
sudo mkdir /usr/lib/hiredis
sudo cp libhiredis.so /usr/lib/hiredis //将动态连接库libhiredis.so至/usr/lib/hiredis
sudo mkdir /usr/include/hiredis
sudo cp hiredis.h /usr/include/hiredis

http2

依赖nghttp2库
mac安装:brew install nghttp2

nginx配置

看个人喜好,可选择不配置
server {
    listen 80;
    root WORKERDIR/swoole/;
    server_name swoole-test.cn;
    location / {
        #如果$uri对应的文件存在,在nginx处理,否则把请求交给swoole处理
        try_files $uri @swoole;
    }
    location @swoole {
        proxy_http_version 1.1;
        proxy_redirect off;
        proxy_set_header Connection "keep-alive";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        if (!-e $request_filename) {
          proxy_pass http://127.0.0.1:9501;
        }
        if (!-f $request_filename) {
          proxy_pass http://127.0.0.1:9501;
        }
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
        proxy_set_header Host $host;
    }
   fastcgi_connect_timeout 300;
   fastcgi_send_timeout 300;
   fastcgi_read_timeout 300;