swoole学习之第一个swoole程序

前言

通过前面两篇文章,我们恶补了一下网络的基础知识和RPC的介绍,接下来我们就开始学习PHP版本的RPC框架,swoole.

swoole介绍

介绍

Swoole是一个C++编写的基于异步事件驱动和协程的并行网络通信引擎,为PHP提供高性能网络编程支持

swoole能提供哪些功能

http服务 ,编写一个简单的web server。 
TCP/UDP服务 ,编写一个消息接受处理系统。
异步,可以异步的处理请求。 
并发 ,可以并发的处理同一个业务逻辑。 
socket,socket通讯处理技术。 
毫秒级别定时器,可以在php中使用定时器了。 
协程,相比线程更稳定和好用。

基于swoole开发的框架

Swoft:

首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的 使用,没有复杂的异步回调,没有繁琐的 yield, 有类似 Go 语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等,可以用于构建高性能的Web系统、 API、中间件、基础服务等等。

EasySwoole:

是一款基于Swoole Server 开发的常驻内存型PHP框架,专为API而生,摆脱传统PHP运行模式在进程唤起和文件加载上带来的性能损失。
EasySwoole 高度封装了Swoole Server 而依旧维持Swoole Server 原有特性,支持 同时混合监听HTTP、自定义TCP、UDP协议,让开发者以最低的学习成本和精力编写出多进程,可异步,高可用的应用服务。

SwooleDistributed:

老牌Swoole框架拥有最完善的开发工具以及最强大的功能,首创SDHelper开发者工具包和开发者调试命令集,可以进行单元测试,捕获客户端流量分析,可视化的进行远程断点联调,还具备代码覆盖率检测的功能 (swoole与xdebug扩展不兼容,SDHelper无需xdebug扩展),并且内置组件极其丰富(类MQTT强悍的订阅发布/Actor模型/内存高速缓存/事件派发/进程管理/定时任务/AMQP任务调度/后台监控/集群/微服务/RPC/异 步连接池/自定义命令等等),开发者可以直接使用加快开发进度。几乎所有的功能都支持集群化,单机切换到集群无需对代码做任何的修改。如果业务开发比较复杂比如(游戏开发)那么SD框架将是你的不二之选

swoole的应用场景

如果你的业务中,有用到以上等特性,你又在用使用php,那么完全可以用swoole来完成了,再具体点的场景如下:

1. 互联网 
2. 移动通信 
3. 企业软件 
4. 云计算 
5. 网络游戏 
6. 物联网(IOT) 
7. 车联网 
8. 智能家居等领域 

可以配合与传统型框架比如laravel,thinkphp6.0进行加速(注意这些框架是ioc容器为核心的)

本质就在于c/s 应用

swoole安装

终于到了激动人心的环节啦,安装我们的swoole

环境搭建

学习环境 : centos7+php7.4+Nginx1.20+mysql5.7+swoole4.42

其中:php7.4+Nginx1.20+mysql5.7通过宝塔的集成环境安装的

swoole的安装

1.下载地址 :

swoole的Github地址:https://github.com/swoole/swoole-src
swoole的gitee地址:https://gitee.com/swoole/swoole/tags

2.下载完成后,打开虚拟机,将压缩包上传上去

  1. 解压缩:tar -xvf swoole-src-4.4.12.tar.gz

4.进入解压缩好的swoole文件夹: cd swoole-src-4.4.12

5.用phpize编译共享PECL扩展库:phpize

6.编译完成后,用./configure进行配置: ./configure

注 !! 在执行 ./configure 的时候容易会出现如下错误:configure: error: Cannot find PHP-config. Please use --with-php-config=PATH

问题的意思就是因为PHP的配置文件没有找到,需要额外的指定如下

./configure --with-php-config=/usr/local/php/bin/php-config

7.你可以通过下面的命令既可以查找到php-config的文件地址 : find / -name php-config

/www/server/php/73/src/scripts/php-config
/www/server/php/73/bin/php-config

8.所以我的安装执行是: ./configure --with-php-config=/www/server/php/73/bin/php-config

9.make编译安装: make && sudo make install

10.最后执行配置好php.ini在里面添加swoole的扩展即可
[root@localhost swoole-src-4.4.12]# find / -name php.ini
/www/server/php/73/etc/php.ini
[root@localhost swoole-src-4.4.12]# vi /www/server/php/73/etc/php.ini
extension=swoole.so

11.然后通过php -m检测,最后就是重启即可
[root@localhost swoole-src-4.4.12]# /etc/init.d/php-fpm-73
restart Reload service php-fpm done

12.关闭防火墙(仅限虚拟机): systemctl stop firewalld

swoole初尝试

服务端代码

<?php
use Swoole\Server;
$server = new Server('0.0.0.0', 9500);

$server->on('start', function ($server) {
    echo "TCP Server is started at tcp:/0.0.0.0:9500\n";
});

$server->on('connect', function ($server, $fd){
    echo "connection open: {$fd}\n";
});

$server->on('receive', function ($server, $fd, $reactor_id, $data) {
    $server->send($fd, "Swoole: {$data}");
});

$server->on('close', function ($server, $fd) {
    echo "connection close: {$fd}\n";
});

$server->start();

客户端代码

<?php
use Swoole\Client;

$client = new Client(SWOOLE_SOCK_TCP);

//连接到服务器
if (!$client->connect('127.0.0.1', 9500, 0.5))
{
    die("connect failed.");
}
//向服务器发送数据
if (!$client->send("hello world"))
{
    die("send failed.");
}
//从服务器接收数据
$data = $client->recv();
if (!$data)
{
    die("recv failed.");
}
echo $data;
//关闭连接
$client->close();

执行服务端代码

执行客户端代码

posted @ 2021-12-14 00:22  努力跟上大神的脚步  阅读(157)  评论(0编辑  收藏  举报