【问题标题】:Laravel Api receiving two requests at the same timeLaravel Api 同时接收两个请求
【发布时间】:2017-06-19 20:30:54
【问题描述】:

我在 laravel 5.4 中有一个 api 由一个 android 应用程序使用,问题是我遇到了竞争问题,因为应用程序多次同时发送 2 次相同的请求,在根据。如何在 Laravel 应用程序级别避免这种情况?我无法调整应用程序,因为它是由另一家公司完成的。

作为一种解决方法,我在函数之前随机休眠 1-15 秒,以防止两个请求同时执行。

谢谢!

【问题讨论】:

  • 唯一键、事务等。取决于发送的数据类型。
  • 这很奇怪;我开发的任何 API 都能够毫无问题地处理并发请求。正在生成什么样的“重复数据”?您的数据库表是否设置为正确处理唯一性(自动递增主键、唯一键等)?
  • 你能举例说明处理请求的方法吗?
  • 问题是我的 api 获取了一组代码,我需要验证它们是否处于活动状态、已发送、无效以及其他状态。我想我没有说清楚的是Android应用程序同时发送相同的请求。它们不是不同实例的请求,发送数据是相同的。如果发送 10 个不同的不同设备,则 api 没有任何问题。我解决了对同一请求限制每个用户每分钟 1 个请求的问题。

标签: php api laravel-5


【解决方案1】:

如 cmets 中所述,唯一密钥和数据库事务是防止数据重复的最佳选择。该文档有一些很好的例子说明从哪里开始。

https://laravel.com/docs/5.4/database#database-transactions

您是否因此遇到任何记录锁定问题?您可以通过将第二个参数传递给DB::transaction() 方法来指定应尝试事务的次数。

您也可以控制手动提交和回滚事务。这与定义唯一索引相结合应该可以防止重复发生。

最后可以通过中间件对api接收的请求进行限速,例如:['prefix' => 'api', 'middleware' => 'throttle:5,10']

希望这一切都会有所帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 2023-03-18
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
相关资源
最近更新 更多