说明
微信开发真乃坑中之坑,会话阻塞场景如下:
小程序,有两个用户同时访问同一个接口会阻塞,第二个请求的人必须请等一个请求的人处理完毕才会响应第二个请求。
但如果我在 PC 上用两个不同的浏览器同时请求这个接口,是并行的,从结果上来看可能是 session 阻塞,即同一个会话同时只能处理一个请求。
我的测试代码如下:
1 |
|
两个不同的小程序用户同时请求,第二个请求的人必须请等一个请求的人返回OK才会打印第二个请求的日志,理论上来说,不同用户的请求应当是并行的,但服务器似乎将它们视为同一个会话(session)了。
一开始想到了异步处理,即controller返回callable让处理不占用会话,但是发现这样做事务没法控制!
解决办法
最终使用了比较粗暴的解决办法,即不使用微信浏览器生成的session id,而是每次请求都由前端生成一个随机数作为session id,这样用户的请求就不会被视为同一个会话了
- 本文作者: reiner
- 本文链接: https://reiner.host/posts/d84fac55.html
- 版权声明: 转载请注明出处,并附上原文链接