您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

laravel如何使用swoole

2024/4/19 15:55:25发布19次查看
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承载代理,据说性能提升很大。
,有大量免费的swoole入门教程,欢迎大家学习!
以上就是laravel如何使用swoole的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product