前台用ajax请求后台,一个简单的操作,比如提交表单,返回成功后调用另一个ajax请求刷新列表,我后台在接收表单数据后先保存入数据库,然后返回成功,在reponse返回的代码后面接下来继续处理业务逻辑,这样在后台继续处理业务逻辑的时候前台已经得到成功的返回,然后前台继续发起刷新表单的请求,但是发现后台必须要等到前一个提交表单的请求处理完所有的业务代码后才会响应这个刷新表单的请求,感觉就像是一个线程串行在处理请求。按照我的理解一个request请求应该会从线程池中取一个新线程来处理这个请求到相应的全过程,每个请求应该都是独立的,为什么会出现这种一个线程同时处理多个请求的情况?难道是在同一页面发起的原因?因为只要另开一个页面就没问题,当前页面的阻塞不会影响到另一个页面
业务代码中有数据库事务锁,其实是卡在事务上了,或者是某个地方不恰当的使用了锁######回复 @malie0 : 打断点应该属于特殊情况,你直接Thread.sleep(5000L)并发测,再看看请求响应的顺序。######回复 @malie0 : debug看下,线程池是不是耗尽了######应该没用到事务锁,response后面的代码可以什么都不写,就一个systemout的打印输出,然后打个断点,后面的请求就会卡住######在reponse返回的代码后面接下来继续处理业务逻辑 什么意思?reponse写出流之后,继续使用线程?那这个线程不会返回给servlet容器的线程池,接下来的请求会被给线程池中其他的线程######回复 @gaomq : 但是只要执行了response的返回就能立刻返回给前台的,跟后台有没有执行完方法没关系,应该不需要用异步servlet######回复 @malie0 : reponse想先返回,需要开异步。一个request和response处理一次请求。######对啊,就是当前线程在返回response响应代码后继续在处理业务逻辑,按照道理后面的请求会用另一个线程去处理,但是卡住了,只有等到这个线程处理完了才会处理下一个请求######http1.1在一个连接上,前一个请求收到响应才会发起下一个请求,是串行的。比如:请求1-->响应1,然后请求2-->响应2。 浏览器对同一个域名能建立的连接是有数量限制的。 猜测你的两个请求走的是同一个连接。######回复 @gaomq : 查到了这个,你看看https://stackoverflow.com/questions/45583861/how-does-http2-solve-head-of-line-blocking-hol-issue#answer-45583977,有问题再交流。######回复 @gaomq :谢谢你的回复,我又想了想,“并且多个请求可以重叠进行”好像不行。假如请求1和2连续发出,服务器端请求1由线程1处理,请求2由线程2处理,线程2处理的快,先写出了响应(响应2的TCP包应该是在响应1的前面的,但我不确定),客户端应该是识别不出这个响应是请求1还是请求2的。你有没有文章佐证你的观点。我说的是串行的,是我从http1.1和http2区别上看到的。######http 1.1则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求######这个有没有办法解决,让他们走不同的连接,前台ajax或者后台的servlet的配置?######应该是你前端的业务是串行执行的吧,后端单线程还是多线程都是可以自己配置的,不同的web层框架,配置的方式不同。######前端是在得到一个响应后才会触发另一个,但是对于后端来说应该两次响应要用不同的线程去处理,现在的情况感觉后端就是用了同一个线程在处理,所以出现了串行的问题######ajax不是可以设置是否异步处理,######ajax应该是异步的。就算是同步也不是导致我的问题的原因,因为ajax已经根据第一次返回的响应发起了第二次请求,后台是第二次请求发起后阻塞了。ajax的异步和同步只是前端要不要等待响应结果才做其他事情还是在请求没返回响应的时候还能执行其他代码######java servlet是多线程的,http1的ajax是阻塞的,也就是只有等到结果返回才能进行下次请求,http2的ajax才是真正的异步,http1、http2这个是刚好前几天在这里看到一篇博客。######但是我的问题是前端已经接收到第一次请求的响应才发起第二个请求,后端在第二个请求的时候阻塞了,我觉得跟前端应该已经没关系了######感觉像是AJAX没有开启异步处理吧。######请问这个问题解决了吗?请教下
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。