返回顶部
首页 > 资讯 > 精选 >EasySwoole如何安装使用
  • 166
分享到

EasySwoole如何安装使用

2023-06-14 06:06:42 166人浏览 独家记忆
摘要

小编给大家分享一下EasySwoole如何安装使用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!EasySwooleEasySwoole 是一款基于Swoole Server 开发的常驻内存型的分布式PHP框架,专为api

小编给大家分享一下EasySwoole如何安装使用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

EasySwoole

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

安装

  • 保证 PHP 版本大于等于 7.1

  • 保证 Swoole 拓展版本大于等于 4.4.15

  • 需要 pcntl 拓展的任意版本

  • 使用 linux / FreeBSD / MacOS 这三类操作系统

  • 使用 Composer 作为依赖管理工具

composer require easyswoole/easyswoole=3.x
php vendor/easyswoole/easyswoole/bin/easyswoole install

  • 新版的easyswoole安装会默认提供App命名空间,还有index控制器

  • 在这里面需要填写n,不需要覆盖,已经有的 EasySwooleEvent.phpindex.php dev.php produce.php

  • 当提示exec函数被禁用时,请自己手动执行 composer dump-autoload 命令更新命名空间

进入项目根目录执行程序,项目执行成功,访问页面

php easyswoole start

HTTP

HttpController为控制器根目录,访问会根据url自动映射到此目录的控制器中,Index作为默认控制器,index为默认方法

访问http://192.168.88.16:9501地址为默认访问到index.php控制器中index方法,即http://192.168.88.16:9501/index/index地址与tp框架的访问相类似

  • 我们在index控制器中新建一个hello方法,打印hello world,重新启动项目,访问http://192.168.88.16:9501/hellohttp://192.168.88.16:9501/index/hello页面都会打印hello world

<?phpnamespace App\HttpController;use EasySwoole\Http\AbstractInterface\Controller;class Index extends Controller{ public function hello(){        $this->response()->write('hello world');    }    public function index()    {        $file = EASYSWOOLE_ROOT.'/vendor/easyswoole/easyswoole/src/Resource/Http/welcome.html';        if(!is_file($file)){            $file = EASYSWOOLE_ROOT.'/src/Resource/Http/welcome.html';//欢迎页面        }        $this->response()->write(file_get_contents($file));    }    protected function actionNotFound(?string $action)    {        $this->response()->withStatus(404);        $file = EASYSWOOLE_ROOT.'/vendor/easyswoole/easyswoole/src/Resource/Http/404.html';        if(!is_file($file)){            $file = EASYSWOOLE_ROOT.'/src/Resource/Http/404.html';        }        $this->response()->write(file_get_contents($file));    }}

WebSocket

websocket协议在传统的phpWEB框架就不适用了,在php中基本就使用workerman和swoole去解决这种场景,在easyswoole框架即是swoole的封装

  • dev.php配置文件,将服务类型SERVER_TYPE修改为EASYSWOOLE_WEB_Socket_SERVER,进行WebSocket通讯,EasySwooleEvent.php文件中,新增主服务增加onMessage事件监听消息

<?phpnamespace EasySwoole\EasySwoole;use EasySwoole\EasySwoole\Swoole\EventReGISter;use EasySwoole\EasySwoole\AbstractInterface\Event;use EasySwoole\Http\Request;use EasySwoole\Http\Response;class EasySwooleEvent implements Event{    public static function initialize()    {        // TODO: Implement initialize() method.        date_default_timezone_set('Asia/Shanghai');    }    public static function mainServerCreate(EventRegister $register)    {        // TODO: Implement mainServerCreate() method.\        $register->set(EventRegister::onMessage,function (\swoole_websocket_server $server, \swoole_websocket_frame $frame){            var_dump($frame);        });    }    public static function onRequest(Request $request, Response $response): bool    {        // TODO: Implement onRequest() method.        return true;    }    public static function afterRequest(Request $request, Response $response): void    {        // TODO: Implement afterAction() method.    }}
  • 使用easyswoole的测试工具进行连接测试

WebSocket控制器

在WebSocket,一般都是在一个onmessage中写响应代码,业务复杂的情况下一个方法中非常的冗长,easyswoole提供一种类似控制器方式的写法,这里已官方的例子为例:

  • 安装拓展包

composer require easyswoole/socket

dev.php,修改SERVER_TYPE为:

‘SERVER_TYPE’ => EASYSWOOLE_WEB_SOCKET_SERVER,

注册服务:

public static function mainServerCreate(EventRegister $register): void{        // 创建一个 Dispatcher 配置    $conf = new \EasySwoole\Socket\Config();    // 设置 Dispatcher 为 WebSocket 模式    $conf->setType(\EasySwoole\Socket\Config::WEB_SOCKET);    // 设置解析器对象    $conf->setParser(new WebSocketParser());    // 创建 Dispatcher 对象 并注入 config 对象    $dispatch = new Dispatcher($conf);    // 给server 注册相关事件 在 WebSocket 模式下  on message 事件必须注册 并且交给 Dispatcher 对象处理    $register->set(EventRegister::onMessage, function (\swoole_websocket_server $server, \swoole_websocket_frame $frame) use ($dispatch) {        $dispatch->dispatch($server, $frame->data, $frame);    });}

创建App/WebSocket/WebSocketParser.php文件

namespace App\WebSocket;use EasySwoole\Socket\AbstractInterface\ParserInterface;use EasySwoole\Socket\Client\WebSocket;use EasySwoole\Socket\Bean\Caller;use EasySwoole\Socket\Bean\Response;class WebSocketParser implements ParserInterface{        public function decode($raw, $client) : ? Caller    {        // 解析 客户端原始消息        $data = JSON_decode($raw, true);        if (!is_array($data)) {            echo "decode message error! \n";            return null;        }        // new 调用者对象        $caller =  new Caller();                $class = '\\App\\WebSocket\\'. ucfirst($data['class'] ?? 'Index');        $caller->setControllerClass($class);        // 提供一个事件风格的写法//         $eventMap = [//             'index' => Index::class//         ];//         $caller->setControllerClass($eventMap[$data['class']] ?? Index::class);        // 设置被调用的方法        $caller->setAction($data['action'] ?? 'index');        // 检查是否存在args        if (!empty($data['content'])) {            // content 无法解析为array 时 返回 content => string 格式            $args = is_array($data['content']) ? $data['content'] : ['content' => $data['content']];        }        // 设置被调用的Args        $caller->setArgs($args ?? []);        return $caller;    }        public function encode(Response $response, $client) : ? string    {                return $response->getMessage();    }}

创建App/WebSocket/Index.php文件

composer require easyswoole/task

<?phpnamespace App\WebSocket;use EasySwoole\EasySwoole\ServerManager;use EasySwoole\EasySwoole\Task\TaskManager;use EasySwoole\Socket\AbstractInterface\Controller;class Index extends Controller{    function hello()    {        $this->response()->setMessage('call hello with arg:'. json_encode($this->caller()->getArgs()));    }    public function who(){        $this->response()->setMessage('your fd is '. $this->caller()->getClient()->getFd());    }    function delay()    {        $this->response()->setMessage('this is delay action');        $client = $this->caller()->getClient();        // 异步推送, 这里直接 use fd也是可以的        TaskManager::getInstance()->async(function () use ($client){            $server = ServerManager::getInstance()->getSwooleServer();            $i = 0;            while ($i < 5) {                sleep(1);                $server->push($client->getFd(),'push in http at '. date('H:i:s'));                $i++;            }        });    }}
  • websocket测试工具进行测试,进行提交的json自动到相应的控制器方法中进行处理

看完了这篇文章,相信你对“EasySwoole如何安装使用”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: EasySwoole如何安装使用

本文链接: https://lsjlt.com/news/268647.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • EasySwoole如何安装使用
    小编给大家分享一下EasySwoole如何安装使用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!EasySwooleEasySwoole 是一款基于Swoole Server 开发的常驻内存型的分布式PHP框架,专为API...
    99+
    2023-06-14
  • easyswoole一键安装脚本及宝塔安装错误问题
    常见问题 在新接触easyswoole的phper中,经常遇到以下几个问题 安装步骤多 麻烦 宝塔等集成环境下容易出错 自己会安装,但是懒 有没有一键的? 开始创造 本人作为easyswoole...
    99+
    2022-06-04
    easyswoole 安装 宝塔安装错误
  • OSWatcher如何安装使用
    这篇文章主要介绍了OSWatcher如何安装使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 [root@rhel5 ~]# l...
    99+
    2024-04-02
  • Redis如何安装使用
    这篇文章主要介绍了Redis如何安装使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 一、Redis基础部分:  1、red...
    99+
    2024-04-02
  • 如何安装使用sysbench
    本篇文章为大家展示了如何安装使用sysbench,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。yum -y ins...
    99+
    2024-04-02
  • MyCAT如何安装使用
    这篇文章主要介绍了MyCAT如何安装使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 MyCAT安装 mycat运行依赖于...
    99+
    2024-04-02
  • SQLAdvisor如何安装使用
    小编给大家分享一下SQLAdvisor如何安装使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 一...
    99+
    2024-04-02
  • 如何安装使用GitLab
    这篇文章主要为大家展示了“如何安装使用GitLab”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何安装使用GitLab”这篇文章吧。GitLab 是一个用于仓库管理系统的开源项目,使用Git作...
    99+
    2023-06-27
  • Pandas如何安装使用
    这篇文章主要介绍了Pandas如何安装使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 安装如果做数据分析用途建议使用Anaconda,自带pandas numy 以及...
    99+
    2023-06-03
  • Flutter如何安装使用
    这篇文章给大家分享的是有关Flutter如何安装使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。序言Flutter出来已经有些日子了,越来越多的开发者也开始尝试使用 Flutter 进行开发...
    99+
    2023-06-04
  • SSDB如何安装和使用
    这篇文章给大家分享的是有关SSDB如何安装和使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。介绍:SSDB是一个高性能的支持丰富数据结构的 NoSQL 数据库, 使用硬盘存储,...
    99+
    2024-04-02
  • 如何安装与使用mysql5.7.21
    如何安装与使用mysql5.7.21?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、MySQL安装1、官网下载社区版2、解压...
    99+
    2024-04-02
  • 如何安装与使用DataGrip
    如何安装与使用DataGrip?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。mysql的安装 官网下载mysql-8.0.19-winx6...
    99+
    2024-04-02
  • Trac如何安装和使用
    小编给大家分享一下Trac如何安装和使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!安装介绍:  根据官网的介绍可以...
    99+
    2024-04-02
  • mysqlsla如何安装与使用
    这篇文章给大家分享的是有关mysqlsla如何安装与使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mysqlsla的安装与使用1. mysqlsla[root@localho...
    99+
    2024-04-02
  • Angular CLI如何安装使用
    小编给大家分享一下Angular CLI如何安装使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!安装Angular CLI1....
    99+
    2024-04-02
  • vue-devtools如何安装使用
    这篇文章将为大家详细讲解有关vue-devtools如何安装使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。vue-devtools 是一款基于chrome游览器的插件...
    99+
    2024-04-02
  • python安装后如何使用
    python安装后的使用方法:使用Python自身提供的IDLE集成开发环境。直接在idle中输入代码,按回车就可以运行。或者用idle新建一个Python文件,在python文件中敲写代码更加方便。...
    99+
    2024-04-02
  • 使用anaconda如何安装pandas
    今天就跟大家聊聊有关使用anaconda如何安装pandas,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在anaconda中安装pandas的方法:在cmd命令行输入:pip&nb...
    99+
    2023-06-14
  • 如何安装与使用Postman
    这期内容当中小编将会给大家带来有关如何安装与使用Postman,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。安装Postman最早是作用chrome浏览器插件存在的,所以,你可以到chrome商店搜索下载...
    99+
    2023-06-07
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作