swoole简介及安装
一、swoole介绍
1. swoole 简介
swoole是PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。
2. swoole提供的功能库。
swoole提供了哪些功能给我们用,以为我们用到哪些服务时,可以用swoole来帮我们实现。
- http服务 ,编写一个简单的web server。
- TCP/UDP服务 ,编写一个消息接受处理系统。
- 异步,可以异步的处理请求。
- 并发 ,可以并发的处理同一个业务逻辑。
- socket,socket通讯处理技术。
- 毫秒级别定时器,可以在php中使用定时器了。
- 协程,相比线程更稳定和好用。
如果你的业务中,有用到以上等特性,你又在用使用php,那么完全可以用swoole来完成了,再具体点的场景如下:
1、互联网
2、移动通信
3、企业软件
4、云计算
5、网络游戏
5、物联网(IOT)
6、车联网
7、智能家居等领域
二、环境部署-php7安装
1、一键安装包方式
简单粗暴适合快速安装,前期自己容易编译错误的时候,直接按照教程快速安装,可以用这种,下面是地址
https://lnmp.org/install.html
2、编译安装
大体步骤:
解压 tar
configure
make
make install
生产环境下,自己掌握如何编译,并且安装扩展
1、首先通过wget命令下载到指定文件
wget http://cn2.php.net/distributions/php-7.2.4.tar.gz
2、通过tar命令解压
tar -zxf php-7.2.4.tar.gz
3、cd到目录利用configure 生成安装文件
在安装包下面一般有个configure, 是用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,具体可以通过configure --help 查看相应的命令,这里只指定了php目录跟配置文件目录,其它任何扩展都没有编译
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm
4、编译前检查
想要编译必须要安装相应的依赖扩展库可以提前的下载这里使用yum来进行扩展安装,一般需要以下几个扩展支持,否则会出现错误
yum -y install gcc gcc-c++ libxml2-devel m4 autoconf pcre-devel make cmake bison
5、正式安装 make && make install
开发过程中、需要使用到php命令执行程序、但是php命令没有在全局命令中;每次执行都需要加上全路径特别麻烦,把php命令添加到全局变量中,以后每次只用输入php可以了
在centos7.2当中就可以使用下面的方式进行添加
vim /etc/profile文件
pathmunge /usr/local/php/bin 配置环境变量
然后执行source /etc/profile 让当前的配置生效
7、最后配置文件拷贝到指定的目录
php -i | grep Configuration 查询配置文件目录
将源码当中的配置文件指定到相应的目录
cp php.ini-development /usr/local/php/etc/php.ini
8、扩展安装示例、通过yum安装依赖,然后在ext目录安装,同样的编译方式,比如curl的安装
yum install libcurl-devel
三、环境部署-swoole源码编译安装
Swoole安装方式跟php安装方式是一样的,下载解压、编译
wget https://pecl.php.net/get/swoole-2.1.1.tgz
四、ide提示工具安装
安装好之后呢。如果你还需要对你想对你的编辑器,比如:phpstrom 对swoole的代码提示功能,就可以下载帮助文件:https://github.com/swoole/ide-helper
点击setting选择languages 点击+号添加我们下载的文件
五、sftp上传配置
/****************************服务端***************************/
//创建Server对象,监听 0.0.0.0:9501端口
$serv = new swoole_server("0.0.0.0", 9501);
$serv->set([
'worker_num' => 2, //设置进程
]);
//监听连接进入事件,有客户端连接进来的时候会触发
$serv->on('connect', function ($serv, $fd) {
echo "有新的客户端连接,连接标识为$fd" . PHP_EOL;;
});
//监听数据接收事件,server接收到客户端的数据后,worker进程内触发该回调
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
$serv->send($fd, "服务器给你发送消息了: ".$data);
});
//监听连接关闭事件,客服端关闭,或者服务器主动关闭
$serv->on('close', function ($serv, $fd) {
echo "编号为{$fd}的客户端已经关闭.".PHP_EOL;
});
//启动服务器
$serv->start();
/****************************客户端***************************/
// 创建一个同步非阻塞客户端tcp socket
// 第一个参数是表示socket的类型,有下面四种类型选择,这里选则tcp socket就好
/*
SWOOLE_SOCK_TCP 创建tcp socket
SWOOLE_SOCK_TCP6 创建tcp ipv6 socket
SWOOLE_SOCK_UDP 创建udp socket
SWOOLE_SOCK_UDP6 创建udp ipv6 socket
*/
// 第二个参数是同步还是异步
/*
SWOOLE_SOCK_SYNC 同步客户端
SWOOLE_SOCK_ASYNC 异步客户端
*/
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
// 随后建立连接,连接失败直接退出并打印错误码
$client->connect('0.0.0.0', 9501) || exit("connect failed. Error: {$client->errCode}\n");
// 向服务端发送数据
$client->send("我要连接服务器");
// 从服务端接收数据
$response = $client->recv();
// 输出接受到的数据
echo $response . PHP_EOL;
// 关闭连接
$client->close();