首页 php框架 Swoole laravel如何使用swoole

laravel如何使用swoole

Dec 12, 2019 am 10:28 AM
laravel swoole 使用

laravel如何使用swoole

PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。

Swoole官网的文档不够丰富啊,这比较头疼,但大部分的问题都解释了。如果你对Swoole很感兴趣,那么看看这个Swoole入门教程。Swoole提供了多线程、长连接等很多牛逼的功能,把php上升到了一个新的台阶,具体的你可以看看入门教程,本文只限于讨论Laravel和Swoole的结合。

Swoole为了提供服务,必须以CLI模式运行,什么是CLI模式呢?如果你Swoole业务代码是写在一个叫server.php的文件中,那么在命令行下输入php server.php开启。这是比较头疼的事情,因为Laravel框架可不是这样的运转的,那如何能与Laravel结合呢?没错,自定义一条Artisan Command,就这么简单。

STEP 1-自定义Command

关于自定义Artisan Commnad,你需要了解的技术点都在这里,我自定义了一个叫做SwooleCommand的命令,直接贴关键代码:

591325acf21ea6544b620c9cd72dd3d.png

fire是入口

在命令行(CLI)下执行php artisan swoole start即可开启Swoole服务。分析一下代码,你可以看到命令参数包括启动、重启、关闭,我图省事只实现了启动部分,如果需要关闭,在linux中利用kill命令关闭进程,步骤挺简单的:

1.执行 ps -aux|grep artisan命令,获取pid(有多个进程,杀第一个即可)

2.执行 kill pid命令,pid是第一步你获取的

关于Swoole的配置不是本文讨论的范围,请移步官网,这里把Swoole服务用$serv变量进行了保存,是为了后面Laravel发送命令交互。你可以看到,Swoole的事件响应代码是这样的:

a13cd370e6a92267fb56ad6417c58a8.png

用Handler处理事件响应

如果说fire打开了Swoole的大门,那么这里的handler就是Swoole与Laravel的传送带,利用自己写的handler,就可以把各种业务逻辑写进Laravel框架中,然后就可以使用Laravel提供的各种高效方便的功能了。“handler”是一种命名习惯,你也可以叫做"callback"、"manager"、"listener",这看你的命名习惯了。我没有采用new的方式而是用Laravel的IoC注入App::make,主要是图省事(因为handler的构造器用到了我自定义的数据处理类,往下看)。

STEP 2-自定义handler

因为是自定义的类,请遵循命名空间,并在composer.json中声明,完了执行composer dump-autoload命令更新一遍。比如我创建了一个文件夹app\handlers存放handler,那么在composer.json中看起来是这样的:

91d6f94a43011fbb96c9359be2e94f7.png

autoload不能少

那么handler里面具体干些啥,就由你来决定了。反正和写controller差不多,各种Laravel框架的功能你都能随便用,贴上我的:

ae68a23e340c40a568405d554e5929d.png

上一节我提到我用IoC是因为构造器里面用到了自己的数据处理类,我把增删改查和其他数据处理的业务放到Repository中了,没其他原因,只是这样代码看起来清爽一点。如此,利用Swoole接收数据的流程就算搞定了,那么要想利用Swoole向客户端发送数据该怎么做呢?咳咳,这个稍微麻烦点,需要曲线方法实现,继续看下一节。

STEP 3-发送数据

有两种方法,但都离不开一个缓存kv结构(Laravel自带的Cache功能就够了),保存客户端的地址数据,要不你怎么知道发到哪里去。我用的是第一种,图省事,发送数据和Swoole就无关了,如果你需要长连接websocket,这种不适用,老老实实用第二种吧。如果你有更好的办法,请一定要告诉我!

第一种:fsockopen

挺简单的,和swoole就没关系了,利用Swoole的connection_info函数获取客户端的IP地址和端口,然后用fsockopen直接发送数据。

第二种:内部端口监听

Swoole支持监听多个端口,实现的思想就是利用fsockopen把数据利用内部监听的端口发送过去,然后就可以调用$serv发送消息了。这么做的好处就是不需要知道客户端的实际IP地址和端口,在Cache保存客户端的$fd标识,直接就发数据。采用这个思路,请记得iptables把端口打开。我自己并没有采用,因为不是长连接我觉得太麻烦。

总结

Swoole非常棒,其实都没怎么用上(项目钱给够再说吧)。你还可以参考官网的配置,将Swoole作为nginx承载代理,据说性能提升很大。

PHP中文网,有大量免费的Swoole入门教程,欢迎大家学习!

以上是laravel如何使用swoole的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Laravel - Artisan 命令 Laravel - Artisan 命令 Aug 27, 2024 am 10:51 AM

Laravel - Artisan 命令 - Laravel 5.7 提供了处理和测试新命令的新方法。它包括测试 artisan 命令的新功能,下面提到了演示?

Laravel - 分页自定义 Laravel - 分页自定义 Aug 27, 2024 am 10:51 AM

Laravel - 分页自定义 - Laravel 包含分页功能,可帮助用户或开发人员包含分页功能。 Laravel 分页器与查询构建器和 Eloquent ORM 集成。自动分页方法

在Docker环境中使用PECL安装扩展时为什么会报错?如何解决? 在Docker环境中使用PECL安装扩展时为什么会报错?如何解决? Apr 01, 2025 pm 03:06 PM

在Docker环境中使用PECL安装扩展时报错的原因及解决方法在使用Docker环境时,我们常常会遇到一些令人头疼的问�...

在Laravel中如何获取邮件发送失败时的退信代码? 在Laravel中如何获取邮件发送失败时的退信代码? Apr 01, 2025 pm 02:45 PM

Laravel邮件发送失败时的退信代码获取方法在使用Laravel开发应用时,经常会遇到需要发送验证码的情况。而在实�...

Laravel计划任务不执行:schedule:run命令后任务未运行怎么办? Laravel计划任务不执行:schedule:run命令后任务未运行怎么办? Mar 31, 2025 pm 11:24 PM

Laravel计划任务运行无响应排查在使用Laravel的计划任务调度时,不少开发者会遇到这样的问题:schedule:run...

在 Laravel 中,如何处理邮件发送验证码失败的情况? 在 Laravel 中,如何处理邮件发送验证码失败的情况? Mar 31, 2025 pm 11:48 PM

Laravel邮件发送验证码失败时的处理方法在使用Laravel...

在dcat admin中如何实现点击添加数据的自定义表格功能? 在dcat admin中如何实现点击添加数据的自定义表格功能? Apr 01, 2025 am 07:09 AM

在dcatadmin(laravel-admin)中如何实现自定义点击添加数据的表格功能在使用dcat...

从PHP转Go还是前端?过来人的建议与现实困惑 从PHP转Go还是前端?过来人的建议与现实困惑 Apr 01, 2025 pm 02:12 PM

从PHP转Go的困惑与选择起因最近,我无意中得知公司内Android和嵌入式C等其他岗位同事的薪资情况,发现他们比�...

See all articles