使用`findManyFromCache($ids)`的时候,同一个浏览器下两次请求进入控制器的时间产生了间隔
Closed this issue · 12 comments
问题描述:
在我的本地环境下,当我使用findManyFromCache($ids)
的时候
- 在没有缓存的情况下,当
$ids
大于400之后,同一个浏览器下两次请求进入控制器的时间产生了间隔。 - 在缓存生成后或者
$ids
小于400的时候,同一个浏览器下没有两次请求进入控制器的时间产生了间隔
这种情况发生。 - 在直接请求数据库
limit()->get()
的时候,同一个浏览器下没有两次请求进入控制器的时间产生了间隔
这种情况发生。 - 在不同浏览器下发送请求,没有
两次请求进入控制器的时间产生了间隔
这种情况发生。
而且,这个间隔非常的相似,20s
所以,想请教一下,这个可能是我这里什么原因导致的?
php版本和swoole扩展
代码:
实验内容:
分别尝试limit100、400、500、1000的情况下请求是否产生了间隔。
实验结果:
1.清除缓存,使用一个浏览器发送两个请求,limit限制100
2.清除缓存,使用一个浏览器发送两个请求,limit限制400
3.清除缓存,使用一个浏览器发送两个请求,limit限制500
既然不同的浏览器没有这个问题,那只能是你浏览器有什么限制了
@limingxinleo
两个浏览器同时发送两次请求是指,A与B浏览器同时请求一次,这种情况下没有产生时间间隔。
单独用A或B的话,都会产生时间间隔。
为了避免是由于我的机器原因导致,所以我在不同的机器上进行了尝试。发现均是这种情况。
并且每次产生的间隔都是_20s_
既然你不同的浏览器没有问题,框架肯定是没问题的。。。
框架跟浏览器无关,你直接curl测试也可以。
为了尽量减少不定因素,建议你把进程数也改成1试试
我尝试了一下以下方式
1.使用接口工具同时请求两次,间隔仍然存在
2.new XMLHttpRequest()
Promise.all()
,同时请求两次,间隔没有了。
3.curl确实没有出现间隔,但是curl不是会被识别为不同客户端吗?(和两个不同的浏览器去请求结果一致)
综上,可能是被识别成同一客户端的请求才会出现时间间隔,并且直接get()
数据库并没有这种情况,只有再超过400条ID的findManyFromCache()情况下才会有。
但是总得来说,api的时候不会出现这个间隔就已经满足了我目前的需求。
我尝试了一下以下方式
1.使用接口工具同时请求两次,间隔仍然存在
2.new XMLHttpRequest()
Promise.all()
,同时请求两次,间隔没有了。
3.curl确实没有出现间隔,但是curl不是会被识别为不同客户端吗?(和两个不同的浏览器去请求结果一致)
综上,可能是被识别成同一客户端的请求才会出现时间间隔,并且直接get()
数据库并没有这种情况,只有再超过400条ID的findManyFromCache()情况下才会有。
但是总得来说,api的时候不会出现这个间隔就已经满足了我目前的需求。
你把进程数改成1再试试
刚才尝试的时候,worker已经改成1了。
你Swoole什么版本,hyperf框架是什么版本。用的什么风格服务,异步风格还是协程风格,把server.php的配置发一下我看看。
看了一下鸟哥的这个https://www.laruence.com/2011/07/16/2123.html
可能是浏览器客户端就是这样的原因。
好的