编程语言
首页 > 编程语言> > php – 在后台运行异步作业(laravel)

php – 在后台运行异步作业(laravel)

作者:互联网

我知道Laravel的队列驱动程序,例如redis和beanstalkd,我读到你可以增加beanstalkd等工作者的数量.但是我不确定这些解决方案是否适合我的方案.这就是我需要的;

我通过套接字连接监听XML提要,数据不断快速传播.永远.我在一秒钟内得到了数十个XML文档.

我逐行读取来自这个套接字的数据,一旦我到达XML结束标记,我就将缓冲区发送到另一个要解析的进程.我曾经只是在base64中对xml进行编码,并为每个xml运行一个单独的php进程. shell_exec(‘php parse.php’.$base64XML);

这使我能够非常快速地解析这个永无止境的xml数据.手动线程的排序.现在我想在Laravel中使用相同的功能,但我想知道是否有更好的方法来实现它.我相信Artisan :: call(‘command’)不会把它推到后台.我当然可以在Laravel中做一个shell_exec,但我想知道我是否可以从Beanstalkd或类似的解决方案中受益.

所以真正的问题是:如何设置beanstalkd或redis驱动程序的队列工作者数量?就像我想要同时运行20个线程一样.如果可能的话.

一个稍微不那么重要的问题是:有多少线程太多了?如果我有一个非常高端的专用服务器可以很好地处理负载,那么使用这些工具创建500个线程/工作者会导致代码级别出现任何问题吗?

解决方法:

好的laravel队列就是为此做的.

基本上,你必须创建一个Job Class.你想要在xml文档上做的所有繁重的工作都需要在这里.
然后,您从套接字中取出xml,并在收到一个文档后立即获取you push it on your Queue.

稍后,队列工作人员将从队列中提取它,并完成繁重的工作.

这样做的好处是,如果您排队文档的速度比处理它们的速度快,那么队列将负责处理高负载时刻并将任务排队等待以后.

我也不建议你在没有队列的情况下这样做(像你一样用叉子).实际上,如果文档太多,您将创建太多的子线程并使服务器过载.正确地记录这些线程是有风险的,当具有固定数量的工作人员的简单队列解决所有这些问题时,不值得.

标签:php,multithreading,laravel,pthreads,beanstalkd
来源: https://codeday.me/bug/20190611/1221476.html