欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。由于本站位于香港虚拟主机,故速度比较慢。

文摘  PHP Swoole扩展的安装使用详解

PHP工具扩展 本站 275 0评论

一、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研发团队的效率大大提升,更加专注于开发创新产品。

官网:https://www.swoole.com/ 

官方文档:https://wiki.swoole.com/

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 -mphpinfo()来查看是否成功加载了swoole.so,如果没有可能是php.ini的路径不对,可以使用php --ini来定位到php.ini的绝对路径。

111.jpg

出现标红的这个,就说么安装没有问题,那么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 运行这段代码

444.jpg

运行之后,相当于在当前窗户运行,你也可以让后台运行,为了方便查看服务端监控客户端的响应。就按如图运行就行

555.jpg

运行如图命令,会看到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信息,如下图所示:

222.png

到这里基本所有的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: 测试

333.jpg


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

赞 (3) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽