V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
ReinerShir
V2EX  ›  Java

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

  •  
  •   ReinerShir · Apr 1, 2021 · 2170 views
    This topic created in 1865 days ago, the information mentioned may be changed or developed.

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

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

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

    请教大佬给予解答!

    Supplement 1  ·  Apr 2, 2021
    解决了,各位,前端每次请求时都生成一个随机数作为 sessionId,而不是使用默认微信浏览器生成的。

    个破微信真垃圾
    9 replies    2021-04-02 09:47:34 +08:00
    themostlazyman
        1
    themostlazyman  
       Apr 1, 2021
    有表锁,或者分布锁吧。
    iyaozhen
        2
    iyaozhen  
       Apr 1, 2021
    这个要看你这个接口处理了什么?现在信息不好判断吧
    xuanbg
        3
    xuanbg  
       Apr 1, 2021
    很简单,在接口内部第一行和返回前打印一下 start/end 日志,如果是 start,start,end,end,就是内部问题。start,end,start,end,这就是外部阻塞了。
    shanghai1943
        4
    shanghai1943  
       Apr 1, 2021
    可以先试试 3 楼老哥的做法看看。排查一下是在 controller 层外部排队还是在 controller 层内部排队,然后再看看对应的措施。
    joesonw
        5
    joesonw  
       Apr 1, 2021
    网关导致的?
    gitdoit
        6
    gitdoit  
       Apr 2, 2021
    打日志啊,看看请求有没有同时到达。没有就是外部原因了
    ReinerShir
        7
    ReinerShir  
    OP
       Apr 2, 2021
    @shanghai1943
    @xuanbg
    @iyaozhen
    @gitdoit

    打了日志的,请求没有同时到达,而是等第一个请求结束后第二个请求的日志才打印
    ReinerShir
        8
    ReinerShir  
    OP
       Apr 2, 2021
    @gitdoit
    @xuanbg 关于外部原因,我也曾想过是不是微信浏览器的问题,但是找了一圈微信文档没发现有什么配置,有点束手无策了
    shanghai1943
        9
    shanghai1943  
       Apr 2, 2021
    那是不是客户端发出来的就是串行的了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5740 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 07:24 · PVG 15:24 · LAX 00:24 · JFK 03:24
    ♥ Do have faith in what you're doing.