安装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 以上内核)、FreeBSD
、MacOS
三种操作系统,低版本 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 代替,xhprof
、blackfire
和 molten
可以用 SwooleTracker 代替。
安装准备
安装前必须保证系统已经安装了下列软件
php-7.1
或更高版本gcc-4.8
或更高版本make
autoconf
快速安装
1. 下载 swoole 源码
- https://github.com/swoole/swoole-src/releases
- http://pecl.php.net/package/swoole
- http://git.oschina.net/swoole/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