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

时间:2019-03-13 18:40:26

标签: php laravel concurrency laravel-5.2

具有使用Laravel 5.2的PHP应用程序的服务器收到的两个HTTP请求。两者都触发了相同类型的事件。这两个事件都由一个侦听器拦截。

问题1:事件是按照监听器(同步)接收事件的顺序一个接一个地处理还是会并行处理?

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

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

1 个答案:

答案 0 :(得分:1)

事件不是连续触发函数的好方法。但是,在PHP(以及Javascript)中,事件回调按触发事件的顺序执行(因此1 -> 2的结果为a -> b)。

您将需要详细说明为什么只一次只通过一个请求来执行功能的原因。您可能正在寻找一种锁定或事务处理机制,这是一种RDBMS / SQL功能,可防止在尚未保存记录的情况下对其进行编辑。这样,当两个请求同时到达同一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