zoukankan      html  css  js  c++  java
  • 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();
    

    执行服务端代码

    执行客户端代码

  • 相关阅读:
    node.js基础回顾
    PHP基础回顾之表单(二)
    PHP基础回顾(一)
    知识图谱Knowledge Graph
    Qt addStretch()详解
    Qt实现 QQ好友列表QToolBox
    Qt5
    用户级线程和内核级线程
    TCP状态转换图、滑动窗口、半连接状态、2MSL
    理解tcp顺序释放操作和tcp的半关闭
  • 原文地址:https://www.cnblogs.com/studyandstudy/p/15686002.html
Copyright © 2011-2022 走看看