参考文章
Spring MVC 异步处理请求,提高程序性能:https://www.cnblogs.com/shihaiming/p/6428323.html
异步编程的使用场景和作用: https://blog.csdn.net/simplemurrina/article/details/103901839
SpringMVC 异步(长轮询)实现消息定点推送:https://www.cnblogs.com/chenweichu/articles/5999069.html
Spring MVC使用webSocket保持长连接 :https://my.oschina.net/772304419/blog/3098460
https://blog.csdn.net/weixin_34318956/article/details/92421557
异步 Servlet 发布已久,但似乎 Java 社区使用的人还是不多,不知为何?但异步带来的性能提升不言而喻。在服务器线程数较少,业务耗时的场景下,异步能明显提高系统吞吐量,线程数之外的请求不会像同步请求一样被拖慢。
实际上,这和 Netty 的最佳实践是类似的,永远不要在 IO 线程上做耗时任务,原则是:耗时任务丢进业务线程池,异步操作结束从 IO 线程返回或者直接返回。
防止 IO 线程阻塞,影响后面的请求。
为何要用webflux: https://www.zhihu.com/search?type=content&q=webflux
交杂知识点
也就是说,老版本tomcat只有bio,后来加入了支持nio功能,8.5之后干脆直接放弃bio模式了。
Tomcat用java后来的NIO来优化自己,netty也是基于nio,不过用netty做一个http服务器似乎没那么轻松,所以netty更多领域在于走各种rpc协议,消息中间件,或者其他领域的网络通讯。
Servlet和Netty对比:
这两个似乎没什么可对比的,不过都是前身都是java,关系比较远
如果说把java当做元祖,Nio(这里指java的NIO)当做老爹,Tomcat和netty关系可以当做兄弟(Nio),tomcat跟nginx表兄关系(nginx跟nio没父子关系),那Servlet和netty可以当做堂兄关系(Servlet跟Nio没关系)。
原因解释
异步模式
https://www.cnblogs.com/shihaiming/p/6428323.html
性能有很多特点和意义。反应式和非阻塞通常不会使应用程序运行得更快。在某些情况下,它们可以(例如,如果使用 WebClient并行运行远程调用)。总的来说,以非阻塞方式做事需要更多的工作,这会稍微增加所需的处理时间。
反应式和非阻塞的主要预期好处是能够用少量固定数量的线程和更少的内存进行扩展。这使得应用程序在负载下更具弹性,因为它们以更可预测的方式扩展。然而,为了观察这些好处,您需要有一些延迟(包括缓慢和不可预测的网络I/O混合)。这就是反应堆栈开始显示其优势的地方,而差异可能是巨大的。