1. 概述
Swoole是PHP的一个扩展,但是它与普通的扩展不同,普通的扩展知识提供一个库函数,而Swoole扩展在运行后会接管PHP的控制器,进入时间循环。当IO时间发生后,Swoole会自动回调指定的PHP函数。
Swoole解决了php的即时通信、异步任务、消息队列等方面的问题。Swoole的很多功能都需要CLI(Command Line INterface)的。所以学习Swoole需要一定的Linux/Unix环境编程基础。
2. 安装Swoole
环境要求: Linux/Unix操作系统。Linux内核2.3.32+,php5.3.10+,依赖gcc和cmake包。
Swoole是PHP的标准扩展。所以可以使用phpize来生产PHP编译配置,./configure来做编译配置检测,make来编译,make install来安装。而且Swoole已经收录到PHP官方扩展库,还可以通过pecl install swoole
来安装
- 安装
yum install gcc make autoconf pcre-deve # 安装依赖包
wget http://pecl.php.net/get/swoole-1.9.6.tgz
tar zxvf swoole-1.9.6.tgz
cd swoole-1.9.6
where phpize # 查phpize位置
/usr/local/opt/php56/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
sudo make install
-
php.ini配置
增加以下内容
extension = swoole.so
swoole.aio_thread_num = 2; # 设置AIO异步文件的线程数量
swoole.display_errors = On ; ## 关闭/开启Swoole错误信息,开发的时候就开启吧
swoole.unixsock_buffer_size = ; # 设置进程间通信的UnixSocket缓存区尺寸
swoole.use_namespace = On; # 使用命名空间类风格。默认为关闭。(需要1.8.1+版本)
- 查看安装效果
php-fpm restart;
php -ri swoole | grep Version ; # -ri 显示php的扩展信息
php -m | grep swool
3. 开始Swoole之旅
- 先构建一个Server
vim abc.php
<?php
/**
* 启动一个swoole服务,监听9501端口
*/
$serv = new swool_server('127.0.0.1',9501);
$serv->set(['worker_num'=>2]); // 设置进程数(cpu核数的1-4倍)
/**
* swoole_server是事件驱动。
* 链接事件
* $fd 唯一标识。用于去吧不同的客户端
*/
$serv->on('Connect', function ($serv,$fd) {
echo "new client connected.".PHP_EOL;
});
/**
* 接受事件
* $fromId reactor线程id
* $data 接收到的数据(字符串或者二进制内容)
*/
$serv->on('Receive', function ($serv, $fd,$fromId,$data) {
$serv->send($fd,'Server '.$data);
});
/**
* 关闭链接事件
*/
$serv->on('Close',function($serv,$fd) {
echo "Cleint close.".PHP_EOL;
});
$serv->start();
-
通过telnet模拟Client访问这个Server
在访问之前在命令行输入
php abc.php
来启动服务。
可以通过netstat -anp | grep 9501
来查看服务是否起来
yum install telnet
telnet 127.0.0.1 9501
send ayt
4. 常用php命令
- php -i # 打印php.ini
- php --ini # 打印关于php.ini的信息
- php -m # 查看php加在哪些扩展
- php -l # 检测文件是否有语法错误(php -l test.php)
- php -r # 直接运行php代码(php -r 'echo "hi";')