php swoole携程,基于 Swoole 实现协程篇(三):在 Laravel 框架中使用协程

基于 Swoole 实现协程篇(三):在 Laravel 框架中使用协程

由 学院君 创建于1年前, 最后更新于 1年前

版本号 #1

7432 views

4 likes

0 collects

前两篇教程我们陆续介绍了 Swoole 协程的实现原理,以及如何在 PHP 中基于 Swoole 协程实现并发编程,今天,学院君将介绍如何在 Laravel 框架中使用 Swoole 协程,还是基于 LaravelS 扩展包为例来进行演示。

通过上篇教程的示例代码,你应该已经知道,多个 Swoole 协程的执行顺序时是无序的,这通常取决于每个 Swoole 协程任务的时间复杂度,因此,对于处理 Web 请求的 HTTP 服务器来说,每个请求的数据都要与特定的协程 ID 关联起来,才能让业务逻辑正确执行。

不过在 Laravel 框架中,有很多单例和全局的静态属性,在基于 Swoole 实现的 HTTP 服务器中,这种单例和静态属性一旦初始化后,会常驻在内存中,不会随着请求的结束而销毁,下次同一个 worker 进程中有新的请求过来,依然使用上个请求初始化的单例和静态属性,这就会导致不同请求之间数据的相互影响,比如数据库连接实例就是单例。这种状况在同步阻塞模式下不会有什么问题,但是在基于协程的异步非阻塞模式下,就会有问题,因为每个数据库操作都要建立新的连接,并维护对应连接的 IO 状态,否则就会因为状态异常导致操作失败,要解决这个问题,需要引入连接池,但是 LaravelS 扩展包不支持连接池功能,所以不要在这些场景下使用协程,一般只有在用

你可能感兴趣的:(php,swoole携程)