laravel如何使用swoole

发布时间 - 2019-12-12 00:00:00    点击率:

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的命令,直接贴关键代码:

fire是入口

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

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

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

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

用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中看起来是这样的:

autoload不能少

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

上一节我提到我用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  # c语言  # composer  # mysql  # nginx  # json  # 命名空间  # 线程  # 多线程  # 事件  # 异步  # redis  # 数据库  # http  # udp  # websocket  # linux  # 客户端  # 自定义  # 你可以  # 是这样  # 数据处理  # 如果你  # 官网  # 多个  # 我用  # 我自 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  网站制作大概多少钱一个,做一个平台网站大概多少钱?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  高性价比服务器租赁——企业级配置与24小时运维服务  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  如何在服务器上三步完成建站并提升流量?  韩国服务器如何优化跨境访问实现高效连接?  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  Laravel如何使用Telescope进行调试?(安装和使用教程)  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  java中使用zxing批量生成二维码立牌  网站优化排名时,需要考虑哪些问题呢?  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  浅析上传头像示例及其注意事项  教学论文网站制作软件有哪些,写论文用什么软件 ?  北京专业网站制作设计师招聘,北京白云观官方网站?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  如何在建站之星网店版论坛获取技术支持?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  详解Oracle修改字段类型方法总结  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  如何快速登录WAP自助建站平台?  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  如何在Windows虚拟主机上快速搭建网站?  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  制作旅游网站html,怎样注册旅游网站?  Python文本处理实践_日志清洗解析【指导】  详解vue.js组件化开发实践  香港服务器租用每月最低只需15元?  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  如何在阿里云虚拟主机上快速搭建个人网站?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  UC浏览器如何设置启动页 UC浏览器启动页设置方法  成都网站制作公司哪家好,四川省职工服务网是做什么用?  JavaScript模板引擎Template.js使用详解  Laravel如何自定义错误页面(404, 500)?(代码示例)  EditPlus中的正则表达式实战(6)  中山网站推广排名,中山信息港登录入口?