Laravel事件从不同的HTTP请求同步或异步触发

问题描述 投票:0回答:1

服务器使用Laravel 5.2的PHP应用程序收到的两个HTTP请求。两者都发射了相同类型的事件。两个事件都被一个侦听器截获。

问题1:事件会按侦听器(同步)接收的顺序一个接一个地处理,还是会同时处理?

Q2:有没有办法(或者如果Q1答案是同步的话,以另一种方式进行)同步请求之间的任何功能?我的意思是确保无论同时收到多少请求,该功能当时只能由一个请求执行

UPD。我正在尝试解决的问题是:我的应用程序应该在3d派对服务中进行身份验证。这对于仅建立一个将由应用程序的其他部分使用的会话至关重要。我想在DB中存储会话的访问令牌。所以这个操作不是原子操作:1。尝试从DB获取令牌。 2.如果令牌不存在:2A。验证并接收令牌。 2B。将令牌存储在DB中。 3.返回令牌

php laravel concurrency laravel-5.2
1个回答
1
投票

事件不是串联启动函数的好方法。但是,在PHP(以及Javascript)中,事件回调按照其事件被触发的顺序执行(因此1 -> 2导致a -> b)。

您必须详细说明为什么一次只能通过一个请求执行一个函数。您可能正在寻找一种锁定或事务机制,这是一种RDBMS / SQL功能,可以防止在尚未保存的情况下编辑记录。这样,当2个请求同时到达相同的PHP函数时,您可以让它们等待数据库直到某个事务完成,这样就不会发生读取或写入的重叠。

有关Laravel的实现,请参阅https://laravel.com/docs/5.8/queries#pessimistic-lockinghttps://laravel.com/docs/5.8/database#database-transactions。有关MySQL网站的更多信息(假设正在使用InnoDB):

https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html

© www.soinside.com 2019 - 2024. All rights reserved.