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)
中山网站推广排名,中山信息港登录入口?

