一、PHP Swoole扩展介绍
PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端/客户端。PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端/客户端。
Swoole可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。
PHP官网扩展:http://www.php.net/manual/zh/book.swoole.php
Github项目地址:https://github.com/swoole/swoole-src/
扩展工具:
Swoole 4.X 速查表 https://toxmc.github.io/swoole-cs.github.io/
IDE自动提示工具(自动生成版) :https://github.com/swoole/ide-helper
国内Git镜像:https://gitee.com/swoole/swoole
全量markdown文档: https://github.com/swoole/swoole-wiki
新手入门教程:https://www.gitbook.com/book/linkeddestiny/easy-swoole/details
IDE自动提示工具(手动版) swoole-ide-helper:https://github.com/eaglewu/swoole-ide-helper
Swoole-Docset: https://github.com/halfstring/swoole-chinese-docset
二、Swoole安装
1.环境依赖
· 仅支持 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 或更高版本的操作系统
PHP版本依赖
Swoole-1.x需要 PHP-5.3.10 或更高版本
Swoole-2.x需要 PHP-7.0.0 或更高版本
Swoole-4.x需要 PHP-7.1.0 或更高版本
不依赖 PHP 的 stream、sockets、pcntl、posix、sysvmsg 等扩展。PHP 只需安装最基本的扩展即可
2.编译安装
编译安装
Swoole扩展是按照PHP标准扩展构建的。使用phpize来生成编译检测脚本,./configure来做编译配置检测,make进行编译,make install进行安装。
· 请下载releases版本的swoole,直接从github主干上拉取最新代码可能会编译不过
· 如果当前用户不是root,可能没有PHP安装目录的写权限,安装时需要sudo或者su
· 如果是在git分支上直接git pull更新代码,重新编译前务必要执行make clean
安装准备
安装前必须保证系统已经安装了下列软件
· php-7.0 或更高版本
· gcc-4.8 或更高版本
· make
· autoconf
· pcre (CentOS系统可以执行命令:yum install pcre-devel)
下载地址
https://github.com/swoole/swoole-src/releases
http://pecl.php.net/package/swoole
http://git.oschina.net/swoole/swoole
下载源代码包后,在终端进入源码目录,执行下面的命令进行编译和安装
新手编译示例
cd swoole
sudo phpize (ubuntu 没有安装phpize可执行命令:sudo apt-get install php-dev来安装phpize)
sudo ./configure
sudo make
sudo make install
进阶完整编译示例
初次接触swoole的开发者请先尝试上方的简单编译,如果有进一步的需要,可以根据具体的需求和版本,调整以下示例的编译参数
编译参数参考:https://wiki.swoole.com/wiki/page/437.html
以下脚本会下载并编译master分支的源码, 需保证你已安装所有依赖, 否则会遇到各种依赖错误
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-coroutine \
--enable-openssl \
--enable-http2 \
--enable-async-redis \
--enable-sockets \
--enable-mysqlnd && \
make clean && make && sudo make install
PECL
Swoole项目已收录到PHP官方扩展库,除了手工下载编译外,还可以通过PHP官方提供的pecl命令,一键下载安装
pecl install swoole
配置php.ini
编译安装成功后,修改php.ini加入
extension=swoole.so
通过php -m或phpinfo()来查看是否成功加载了swoole.so,如果没有可能是php.ini的路径不对,可以使用php --ini来定位到php.ini的绝对路径。
出现标红的这个,就说么安装没有问题,那么php怎么调用了 ,使用下面简单的例子,就能明白服务端和客户端之间通信了
这个是服务端代码
//创建Server对象,监听 127.0.0.1:9501端口 $serv = new swoole_server("127.0.0.1", 9501); //监听连接进入事件 $serv->on('connect', function ($serv, $fd) { echo "Client: Connect.\n"; }); //监听数据接收事件 $serv->on('receive', function ($serv, $fd, $from_id, $data) { $serv->send($fd, "Server: ".$data); }); //监听连接关闭事件 $serv->on('close', function ($serv, $fd) { echo "Client: Close.\n"; }); //启动服务器 $serv->start();
下面可能通过php 运行这段代码
运行之后,相当于在当前窗户运行,你也可以让后台运行,为了方便查看服务端监控客户端的响应。就按如图运行就行
运行如图命令,会看到Client:Connect
如果这个时候断开窗口,服务端也会接受到Client:Close
当然这只是一个最基本的扩展安装和调用
3.Centos安装Swoole扩展
1)安装
# wget https://github.com/swoole/swoole-src/archive/swoole-4.2.8-stable.tar.gz
# tar zxvf swoole-4.2.8-stable.tar.gz
# cd swoole-4.2.8-stable
# phpize
# ./configure
# make && make install
提示:
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/lib64/php/modules/
说明安装成功
2)php加载swoole扩展
extension_dir = "/usr/lib64/php/modules/"
extension=swoole.so
3)重启服务
service php-fpm restart
service nginx restart
4)测试,查看phpinfo信息,如下图所示:
到这里基本所有的swoole加入php扩展的操作已经完成。
可以使用php --ri swoole 查看下swoole版本
但是我们要测试一下是否能够启用,在swoole文件下有一个examples下的。server文件下有一个echo 我们cd到server文件下以后。 php echo.php。 如果没有报错说明已经成功。然后我们再打一个窗口, 执行
netstat -anp | grep 9501 看一下这个端口是否有进程。如果有swoole 说明我们已经成功了。
下面是代码测试。
5)代码测试
注意事项:server.php中的ip地址必须是外网可访问地址 123.57.232.99,不能为localhost
server.php代码:
<?php $serv = new swoole_server("123.57.232.99", 55152); $serv->on('connect', function ($serv, $fd){ echo "Client:Connect.\n"; }); $serv->on('receive', function ($serv, $fd, $from_id, $data) { $serv->send($fd, 'Swoole: '.$data); }); $serv->on('close', function ($serv, $fd) { echo "Client: Close.\n"; }); $serv->start(); ?>
client.php代码
<?php $client = new swoole_client(SWOOLE_SOCK_TCP); if (!$client->connect('123.57.232.99', 55152, -1)) { exit("connect failed. Error: {$client->errCode}\n"); } $client->send("hello world\n"); echo $client->recv(); $client->close(); ?>
首先启动服务:
[root@iZ25l6q4losZ swoole]# php server.php
Client:Connect.
然后linux终端 telnet测试
# telnet 123.57.232.99 55152
Trying 123.57.232.99...
Connected to 123.57.232.99.
Escape character is '^]'.
rr
Swoole: rr
测试
Swoole: 测试
4.安装常见错误
make或make install无法执行或编译错误
NOTICE: PHP message: PHP Warning: PHP Startup: swoole: Unable to initialize module
Module compiled with module API=20090626
PHP compiled with module API=20121212
These options need to match
in Unknown on line 0
php版本和编译时使用的phpize和php-config不对应,需要使用绝对路径来进行编译。使用绝对路径执行PHP。
/usr/local/php-5.4.17/bin/phpize
./configure --with-php-config=/usr/local/php-5.4.17/bin/php-config
/usr/local/php-5.4.17/bin/php server.php
缺少mysql头文件
php_mysqli_structs.h:64:23: fatal error: my_global.h: No such file or directory
没有找到mysqlclient的头文件,需要安装mysqlclient-dev
建议自行编译php,不要使用Linux包管理系统自带的php版本
缺少pcre.h头文件
fatal error: pcre.h: No such file or directory
原因是缺少pcre,需要安装libpcre
Cannot find autoconf
phpize命令需要autoconf工具,请先安装它。
make install失败
make install需要root权限,如果不是以root用户登录的,请用sudo或su,再进行安装。
修改了php.ini后,php -m或phpinfo中没有swoole
php -i|grep php.ini
查看加载的php.ini路径,确认加载了正确的php.ini。
修改php.ini,打开错误显示,查看是否存在启动时错误。
display_errors => On
display_startup_errors => On
error: too many arguments to function 'zend_exception_error'
你的PHP版本低于PHP-5.3.10,请升级PHP版本。
参考网址:
https://blog.csdn.net/jzj_xhj/article/details/80510292
https://blog.csdn.net/nuli888/article/details/51849699
https://blog.csdn.net/lishenyangd/article/details/80418996
转载请注明: ITTXX.CN--分享互联网 » PHP Swoole扩展的安装使用详解
最后更新:2018-12-17 12:25:09