2017-06-19 132 views
0

我有一个ara在laravel 5.4中被android应用程序占用,问题是我有一个竞争问题,因为应用程序多次发送相同的请求2次同时,在基地生成重复的数据。如何在Laravel应用程序级别避免这种情况?我无法调整应用程序,因为它是由另一家公司完成的。Laravel Api同时收到两个请求

作为一种解决方法,我在随机睡眠1-15秒之前尝试阻止两个请求同时执行。

谢谢!

+1

唯一键,事务等等取决于正在发送的数据种类。 – ceejayoz

+3

很奇怪;我开发的任何API都能够处理并发请求而没有问题。什么样的“重复数据”正在生成? 您的数据库表是否设置为正确处理唯一性(自动递增主键,唯一键等)? –

+0

你能举一个处理请求的方法的例子吗? –

回答

0

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

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

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

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

最后所有的,你可以给限制通过中间件由API收到的申请,例如:['prefix' => 'api', 'middleware' => 'throttle:5,10']

希望这一切都有助于。

+0

谢谢你的帮助,我在找,我发现这个工具https://github.com/GrahamCampbell/Laravel-Throttle,现在它的工作!我再次将事务放在数据库的任何操作上 – Draake