问一个困扰了我两天的技术问题,微信小程序用户请求同一个接口 session 会阻塞

2021-04-01 16:54:17 +08:00
 ReinerShir

场景如下: 小程序,有两个用户同时访问同一个接口会阻塞,第二个请求的人必须请等一个请求的人处理完毕才会响应第二个请求。

但如果我在 PC 上用两个不同的浏览器同时请求这个接口,是并行的,从结果上来看可能是 session 阻塞,即同一个会话同时只能处理一个请求。

技术框架是 spring boot,HTTPS,我知道 spring mvc 可以异步返回,但我不想这么做,因为我打印了这两个用户的 session id,发现他们是不一样的,所以不应该被别为同一个会话,按我的理解它应该是并行处理才对。

请教大佬给予解答!

1695 次点击
所在节点    Java
9 条回复
themostlazyman
2021-04-01 17:03:06 +08:00
有表锁,或者分布锁吧。
iyaozhen
2021-04-01 17:08:14 +08:00
这个要看你这个接口处理了什么?现在信息不好判断吧
xuanbg
2021-04-01 17:14:05 +08:00
很简单,在接口内部第一行和返回前打印一下 start/end 日志,如果是 start,start,end,end,就是内部问题。start,end,start,end,这就是外部阻塞了。
shanghai1943
2021-04-01 17:30:25 +08:00
可以先试试 3 楼老哥的做法看看。排查一下是在 controller 层外部排队还是在 controller 层内部排队,然后再看看对应的措施。
joesonw
2021-04-01 18:08:42 +08:00
网关导致的?
gitdoit
2021-04-02 08:47:47 +08:00
打日志啊,看看请求有没有同时到达。没有就是外部原因了
ReinerShir
2021-04-02 09:16:21 +08:00
@shanghai1943
@xuanbg
@iyaozhen
@gitdoit

打了日志的,请求没有同时到达,而是等第一个请求结束后第二个请求的日志才打印
ReinerShir
2021-04-02 09:17:59 +08:00
@gitdoit
@xuanbg 关于外部原因,我也曾想过是不是微信浏览器的问题,但是找了一圈微信文档没发现有什么配置,有点束手无策了
shanghai1943
2021-04-02 09:47:34 +08:00
那是不是客户端发出来的就是串行的了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/767267

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX