CentOS7+PHP7.4下编译安装Swoole4.4.*

安装Swoole

Swoole 扩展是按照 PHP 标准扩展构建的。使用 phpize 来生成编译检测脚本,./configure 来做编译配置检测,make 进行编译,make install 进行安装。

  • 如无特殊需求,请务必编译安装 Swoole 的最新 release 版本或 v4.4LTS
  • 如果当前用户不是 root,可能没有 PHP 安装目录的写权限,安装时需要 sudo 或者 su
  • 如果是在 git 分支上直接 git pull 更新代码,重新编译前务必要执行 make clean
  • 仅支持 Linux(2.3.32 以上内核)、FreeBSDMacOS 三种操作系统,低版本 Linux 系统(如 CentOS 6)可以使用 RedHat 提供的 devtools 编译,参考文档, 在 Windows平台,可使用 CygWin 或 WSL(Windows Subsystem for Linux)
  • 部分扩展与 Swoole 扩展不兼容,参考扩展冲突

扩展冲突

由于某些跟踪调试的 PHP 扩展大量使用了全局变量 可能会导致 Swoole 协程发生崩溃。请关闭以下相关扩展:

  • xdebug
  • phptrace
  • aop
  • molten
  • xhprof
  • phalcon(Swoole 协程无法运行在 phalcon 框架中)

其中 xdebug 和 phptrace 可以用 sdebug 代替,xhprofblackfire 和 molten 可以用 SwooleTracker 代替。

安装准备

安装前必须保证系统已经安装了下列软件

  • php-7.1 或更高版本
  • gcc-4.8 或更高版本
  • make
  • autoconf

快速安装

1. 下载 swoole 源码

2. 从源码编译安装

下载源代码包后,在终端进入源码目录,执行下面的命令进行编译和安装

ubuntu 没有安装 phpize 可执行命令:sudo apt-get install php-dev 来安装 phpize
git clone https://github.com/swoole/swoole-src/releases swoole-src
cd swoole-src && \
phpize && \
./configure && \
--enable-openssl  \
--enable-http2 && \
make && sudo make install

也可采用以下进阶编译示例:

mkdir -p ~/build && \
cd ~/build && \
rm -rf ./swoole-src && \
curl -o ./tmp/swoole.tar.gz https://github.com/swoole/swoole-src/archive/master.tar.gz -L && \
tar zxvf ./tmp/swoole.tar.gz && \
mv swoole-src* swoole-src && \
cd swoole-src && \
phpize && \
./configure \
--enable-openssl  \
--enable-http2 && \
make && sudo make install

3. 启用扩展

编译安装到系统成功后,需要在 php.ini 中加入一行 extension=swoole.so 来启用 Swoole 扩展

快速启动

cd ~/swoole-src/examples/server
php echo.php

执行上边代码中echo.php内容为:

<?php
ini_set("display_errors", "On");
error_reporting(E_ALL | E_STRICT);
$serv = new swoole_server("0.0.0.0", 9501);
//$serv->on('connect', function ($serv, $fd, $reactor_id){
//	echo "[#".posix_getpid()."]\tClient@[$fd:$reactor_id]: Connect.\n";
//});
$serv->set(array(
    'worker_num' => 1,

));

$serv->on('receive', function (swoole_server $serv, $fd, $reactor_id, $data) {
	echo "[#".$serv->worker_id."]\tClient[$fd] receive data: $data\n";
    if ($serv->send($fd, "hello {$data}\n") == false)
    {
        echo "error\n";
    }

});

//$serv->on('close', function ($serv, $fd, $reactor_id) {
//	echo "[#".posix_getpid()."]\tClient@[$fd:$reactor_id]: Close.\n";
//});

$serv->start();

然后查看端口9501是否已经启用:

netstat -anp | grep 9501

显示如下即为成功:

 

详细教程可移步swoole官网wiki:swoole-wiki

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章