swoole是什么
swoole是用来补缺php异步处理缺陷的新技术,支持协程,用户也可以完全抛开原来的fpm模式调用,而直接使用php+swoole开发项目,能更加处理网站的高并发,大数据问题;它是php异步网络通讯引擎;异步多线程;
swoole用来做什么
在线直播,聊天室,游戏行业
swoole如何用
安装php,swoole就是php的一个扩展,可以用在http,websocket等请求。
swoole课程1
swoole课程2-php源码编译安装
- configure (shell脚本):主要用于编译安装源代码库和软件,对源代码库进行一些设置(需要gcc,autoconfig);eg:./configure --prefix=/home/usr/local/php (安装路径)
- make -j (构建\编译)
- make install (安装)
知识点
- php的启动,是在bin目录下,启动命令 ./bin/php test.php (执行php)
- 设置当前用户的快捷启动操作:安装目录下 vi ~/.bash_profile export PATH 处,增加 alias php=/home/usr/local/php 然后source ~./bash_profile
- souce filename 和sh filename的区别: source 不会生成新的子shell,只是可能脚本修改需要重新读取执行了这个shell脚本。而sh 则会产生新的子shell,不改变父级shell的进程和变量
- 注意php.ini的默认文件需要自己复制php.ini-development,然后修改成php.ini,源码安装没设置安装路径会默认放在lib文件夹下,但是人们习惯放在etc下,这两个目录下寻找
- php -i | grep php.ini 查找php.ini 生效的目录
swoole课程3-swoole编译安装
- 下载: git clone / 下载上传压缩包,直接解压
- 需要先用phpize 先生成configure 文件,phpize是用来安装php扩展模块的。在swoole的文件目录下,/home/usr/lcoal/bin/phpize 会自动生成 configure 脚本文件
- swoole目录下 ./configure --with-php0-config=/home/usr/local/php/bin/php-config (check操作) ; make &&make install;最后会生成一个so的扩展文件(会自动显示该so扩展文件的路径,一般在lib/php/extensions/ 的目录下);在lib/php.ini 下,增加 extension=swoole;
- 查看php的模块 php -m
swoole课程4-网络通讯
tcp基本四步走
- 创建server对象
- 监听连接进入事件
- 监听数据接收事件; 发送客户端, s e r v − > s e n d ( serv->send( serv−>send(fd, "Server: ".$data);
- 监听关闭事件
- 启动服务器
$serv = new Swoole\Server("127.0.0.1", 9501);
$serv->set([
'worker_num' => 4, //worker process num
'max_request'=>10000
]);
//监听连接进入事件
$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();
udp基本三步走
- 创建server对象
- UDP服务器与TCP服务器不同,UDP没有连接的概念。启动Server后,客户端无需Connect,直接可以向Server监听的9502端口发送数据包;里边传输数据用 s e r v e r − > s e n d t o ( server->sendto( server−>sendto(address, p o r t , port, port,data).
- 启动服务器
$serv = new Swoole\Server("127.0.0.1",9502,SWOOLE_PROCESS,SWOOLE_SOCK_UDP);
$serv->set([
'worker_num' => 4, //worker process num
'max_request'=>10000
]);
//UDP服务器与TCP服务器不同,UDP没有连接的概念。启动Server后,客户端无需Connect,直接可以向Server监听的9502端口发送数据包。对应的事件为onPacket
$serv->on('Packet',function($serv,$data,$clientInfo){
$serv->sendto($clientInfo['address'], $clientInfo['port'], "Server ".$data);
var_dump($clientInfo);
var_dump($data);
});
//启动服务器
$serv->start();
http服务基本三步走
- 创建对象
- 设置静态资源目录
- 接收前端数据,响应返回数据
- 开启http服务器
$http = new swoole_http_server("0.0.0.0", 9501);
// 配置 这里设置了该项,浏览器路由加了,index.html ,代码就不会执行西下边的输出
$http->set([
'enable_static_handler'=>true,
'document_root'=>'/home/swoole-mooc/demo/data',
]);
$http->on('request',function($request,$response){
print_r($request->get);
$response->cookie('login','cook-name',time()+3600);//给当前服务设置一个cookie
$response->header("Content-Type", "text/html; charset=utf-8");
$response->end(