1.swoole的理解

根据swoole的介绍:Swoole是一个为PHP用C和C++编写的基于事件的高性能异步& 协程并行网络通信引擎;
使 PHP 开发人员可以编写高性能的协程 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。
拆分理解:
1. swoole是一个php的扩展, 是由C/C++编辑的
2. swoole是基于事件的高性能异步&协程并行的网络通信引擎
根据关键词理解事件,异步-协程并行,网络通信引擎;
什么是事件?
就是某一个动作发生的时候就可以称之为事件,例子:前台js的鼠标点击事件
异步-协程并行
可以理解为只是一种程序执行的模式
网络通讯引擎
网络就是程序之间的数据交流的连接,从而达到资源共享和通信的目的。通信是人与人之间通过某种媒体进行的信息交流与传递。网络通信是通过网络将各个鼓励的设备进行连接,通过信息交换实现人与人,人与计算机,计算机u计算机兼职的通信,网络通信最终要的就是网络通信协议。
1.1swoole具备什么功能?
swoole提供了哪些功能给我们用,以为我们用到哪些服务时,可以用swoole来帮我们实现。
  • http服务 ,编写一个简单的web server。
  • TCP/UDP服务 ,编写一个消息接受处理系统。
  • 异步,可以异步的处理请求。
  • 并发 ,可以并发的处理同一个业务逻辑。
  • socket,socket通讯处理技术。
  • 毫秒级别定时器,可以在php中使用定时器了。
  • 协程,相比线程更稳定和好用。
1.2 基于swoole框架
 Swoft​
首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield, 有类似 Go 语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等,可以用于构建高性能的Web系统、
API、中间件、基础服务等等。
EasySwoole EasySwoole
是一款基于Swoole Server 开发的常驻内存型PHP框架,专为API而生,摆脱传统PHP运行模式在进程唤起和文件加载上带来的性能损失。EasySwoole 高度封装了Swoole Server 而依旧维持Swoole Server 原有特性,支持
同时混合监听HTTP、自定义TCP、UDP协议,让开发者以最低的学习成本和精力编写出多进程,可异步,高可用的应用服务。
SwooleDistributed SwooleDistributed
老牌Swoole框架拥有最完善的开发工具以及最强大的功能,首创SDHelper开发者工具包和开发者调试命令集,可以进行单元测试,捕获客户端流量分析,可视化的进行远程断点联调,还具备代码覆盖率检测的功能(swoole与xdebug扩展不兼容,SDHelper无需xdebug扩展),并且内置组件极其丰富(类MQTT强悍的订阅发布/Actor模型/内存高速缓存/事件派发/进程管理/定时任务/AMQP任务调度/后台监控/集群/微服务/RPC/异
步连接池/自定义命令等等),开发者可以直接使用加快开发进度。几乎所有的功能都支持集群化,单机切换到集群无需对代码做任何的修改。如果业务开发比较复杂比如(游戏开发)那么SD框架将是你的不二之选
 
2.swoole的应用
 
如果你的业务中,有用到以上等特性,你又在用使用php,那么完全可以用swoole来完成了,再具体点的场景如下:
  • 互联网
  • 移动通信
  • 企业软件
  • 云计算
  • 网络游戏
  • 物联网(IOT)
  • 车联网
  • 智能家居等领域
 
可以配合与传统型框架比如laravel,thinkphp6.0进行加速(注意这些框架是ioc容器为核心的)
本质就在于c/s 应用
 
3.swoole体验及客户端与服务端
 
3.1初体验
我们可以根据手册所写的代码进行简单案例的实践
注意在练习的时候建议设置可以关闭防火墙
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
$ sudo systemctl status firewalld
以tcp服务为例解释:
server
<?php 

// 1. 创建swoole 默认创建的是一个同步的阻塞tcp服务
$host = "192.168.186.129";
// 0.0.0.0 代表接听所有 
// 创建Server对象,监听 127.0.0.1:9501端口 
// 默认是tcp 
$serv = new Swoole\Server($host, 9501);
// 2. 注册事件 
$serv->on('Start', function($serv){ 
	echo "启动swoole 监听的信息tcp:$host:9501\n";
});
//监听连接进入事件
$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"; 
}); 
// 3. 启动服务器 
// 阻塞 
$serv->start(); // 阻塞与非阻塞 
?>

3.2 客户与服务

需要理解什么是服务端和客户端 : 首先它们是相对而言的,服务和客户不是固定的。
服务主要是提供与服务这一方面: 就是能够帮助我们做一件某个事情, 比如 xxx恋爱秘籍 -》 就教我们恋爱技巧
而客户呢就是我们自己 去看这本秘籍 , 因为秘籍中提供了这些 恋爱 技巧的服务。
后来你的成为恋爱大师,要去教别人 那么这个时候你成为了 服务方, 他人就是客户
在这个过程中
xxx恋爱秘籍与你 的关系: xxx秘籍提供恋爱技巧服务, 你是客户
你恋爱大师 教 别人,那么你与别人的关系就是: 你是提供恋爱技巧服务,别人是客户
3.3计算中的client与server
 
这样的事情在计算中也是有的,其实我们每天都在接触和使用只是没有这个概念,比如php连接MySQL,我们的连接方式就是通过pdo 传递用户名,密码,MySQL服务ip,端口号3306的方式连接了;
这个过程中MySQL就是服务端,PHP就是客户端;
对于计算机来说
计算在运行程序的时候会分配一个端口号来运行而一台计算机可分配的端口号有1-65535的范围,访问计算的方式就是通过在该计算的网络段去进行访问的。
在服务端与客户端通信中主要是根据与服务端提供的可访问的ip地址,以及端口号;
但是在通信的时候我们需要一个通信的方式 这个方式我们称之为协议;比如http协议;该协议方式的是最为常见的方式,而然除了这种方式以外还存在于其他的方式比如tcp,udp等,有时候为了通信的安全会选择对于
协议设置一些加密的手段
但是在服务中还存在于一些功能就是,服务就需要接收和主动向关联它的客户端发送一些信息;比如微信公众号的群发,同样客户端也会发送和接收稍息
在服务端的设置-》 因为服务端与客户端是一对多的方式,因此为了全部监听接收到稍息那么就需要配置监听为0.0.0.0;
对于服务端和客户端,在进行交互的时候主要是以事件的方式作为驱动,发送事件,接收事件,连接事件,关闭事件
 
3.4 代码理解
 
对于连接服务来说主要是三大块的内容, 1;创建连接对象,2:server监听事件,3:启动