当前位置: 首页 > news >正文

深圳网站设计优刻成都制作网站公司哪家好

深圳网站设计优刻,成都制作网站公司哪家好,西安网站建设和推广,南京网站维护我们日常使用的 SpringMVC#xff0c;基本上都不是异步 Servlet#xff0c;而学习 WebFlux#xff0c;异步 Servlet 是基础#xff0c;WebFlux。 1.什么是异步 Servlet 先来说说什么是非异步 Servlet。 在 Servlet3.0 之前#xff0c;Servlet 采用 Thread-Per-Request 的方…我们日常使用的 SpringMVC基本上都不是异步 Servlet而学习 WebFlux异步 Servlet 是基础WebFlux。 1.什么是异步 Servlet 先来说说什么是非异步 Servlet。 在 Servlet3.0 之前Servlet 采用 Thread-Per-Request 的方式处理 Http 请求即每一次请求都是由某一个线程从头到尾负责处理。 如果一个请求需要进行 IO 操作比如访问数据库、调用第三方服务接口等那么其所对应的线程将同步地等待 IO 操作完成 而 IO 操作是非常慢的所以此时的线程并不能及时地释放回线程池以供后续使用如果并发量很大的话那肯定会造性能问题。 传统的 MVC 框架如 SpringMVC 也无法摆脱 Servlet 的桎梏原因很简单他们都是基于 Servlet 来实现的。如 SpringMVC 中大家所熟知的 DispatcherServlet如果大家对于 SpringMVC 的原理不太理解可以查看松哥之前的系列文章SpringMVC源码解读系列20 篇干货完美收官。 为了解决这一问题Servlet3.0 中引入了异步 Servlet然后在 Servlet3.1 中又引入了非阻塞 IO 来进一步增强异步处理的性能。 在正式开整 WebFlux 之前我们先来了解下异步 Servlet 的一些基本玩法。 2.版本关系 我们要先看看 Servlet 和 Tomcat 之间的对应关系毕竟异步 Servlet 这种事用错了 Tomcat 版本可能就不支持了。 下图来自 Tomcat 官网http://tomcat.apache.org/whichversion.html 从上图我们可以看出Servlet3.0 对应的 Tomcat 版本是 7.0.xServlet3.1 对应的 Tomcat 版本是 8.0.x。 换句话说如果我们要使用异步 ServletTomcat 至少要 7.0 以上的版本如果你还想体验一把非阻塞IO那么 Tomcat 至少要 8.0 以上。 接下来的案例小伙伴们记得选好自己本地的 Tomcat 版本。 3.基本玩法 先来看一个大家熟悉的同步 Servlet WebServlet(urlPatterns /sync) 这个 Servlet 大家再熟悉不过了。 前端请求到达后我们调用 printLog 方法做一些处理同时把 doGet 方法执行耗时打印出来。 在 printLog 中我们先休息 3s然后给前端返回一个字符串给前端。 前端发送请求最终 doGet 方法中耗时 3001 毫秒。 这是我们大家熟知的同步 Servlet。在整个请求处理过程中请求会一直占用 Servlet 线程直到一个请求处理完毕这个线程才会被释放。 接下来我们对其稍微进行改造使之变为一个异步 Servlet。 有人可能会说异步有何难直接把 printLog 方法扔到子线程里边去执行不就行了但是这样会有另外一个问题子线程里边没有办法通过 HttpServletResponse 直接返回数据所以我们一定需要 Servlet 的异步支持有了异步支持才可以在子线程中返回数据。 我们来看改造后的代码 public class SyncServlet extends HttpServlet { Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { long start System.currentTimeMillis(); printLog(request, response); System.out.println(总耗时 (System.currentTimeMillis() - start)); } private void printLog(HttpServletRequest request, HttpServletResponse response) throws IOException { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } response.getWriter().write(ok); } } WebServlet(urlPatterns /async,asyncSupported true) public class AsyncServlet extends HttpServlet { Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { long start System.currentTimeMillis(); AsyncContext asyncContext request.startAsync(); 这里的改造主要有如下几方面 1. WebServlet 注解上添加 asyncSupported 属性开启异步支持。 2. 调用 request.startAsync(); 方法开启异步上下文。 3. 通过 JDK8 中的 CompletableFuture.runAsync 方法来启动一个子线程当然也可以自己 new 一 个子线程。 4. 调用 printLog 方法时的 request 和 response 重新构造直接从 asyncContext 中获取注意 这点是【关键】。 5. 在 printLog 方法中方法执行完成后调用 asyncContext.complete() 方法通知异步上下文请求 处理完毕。 经过上面的改造之后现在的控制台打印出来的总耗时几乎可以忽略不计了。 也就是说有了异步 Servlet 之后后台 Servlet 的线程会被及时释放释放之后又可以去接收新的请求进而提高应用的并发能力。 第一次接触异步 Servlet 的小伙伴可能会有一个误解以为用了异步 Servlet 后前端的响应就会加快。这个怎么说呢后台的并发能力提高了前端的响应速度自然会提高但是我们一两个简单的请求是很难看出这种提高的。 CompletableFuture.runAsync(() - printLog(asyncContext,asyncContext.getRequest(),asyncContext.getResponse())); System.out.println(总耗时 (System.currentTimeMillis() - start)); } private void printLog(AsyncContext asyncContext, ServletRequest request, ServletResponse response){ try { Thread.sleep(3000); response.getWriter().write(ok); asyncContext.complete(); } catch (InterruptedException | IOException e) { e.printStackTrace(); } } }
http://www.hkea.cn/news/14567171/

相关文章:

  • 静态网站建设开发西安做网站seo
  • 帮做ppt网站做电影网站如何推广
  • 为什么网站建设公司越来越少网站建设公司长沙
  • 南联企业网站建设广州低成本网络营销
  • 佛山正规企业网站排名优化做的很酷炫的网站
  • 网站设计与制作的过程网站开发设计工程师职责简介
  • 网站开发要学什么微博营销网站源码
  • wordpress修改头像插件四平网站优化
  • asp 精品网站制作分销商城源码
  • 上上上海网站设计视频网站建设公司
  • 关于政协 网站建设宁波网站建设哪家强
  • 烟台网站制作策划不花钱做网站
  • 校园网站设计与实现制作表情包的软件
  • 邵阳汽车网站建设菜市场做建筑设计图库的网站设计
  • 电商类网站开发方案打开一个网站为繁体字是怎么做的
  • 嘉兴网站建设方案外包百度怎样建立网站链接
  • 客户端建站wordpress横线
  • 西安搭建网站wordpress arduino
  • 济宁君天建设公司网站微信小程序支付功能开发
  • 做网站网站代理没有盈利违法吗wordpress文章列表分页代码
  • 做网站永久浙江省建设监理协会网站
  • 郑州中原区建设局网站网站建设找业主签字模板
  • 在谷歌上做英文网站网站备案中页面
  • 杭州网站搭建多少钱无锡市做企业网站的
  • 网络营销网站商城网站前期seo应该怎么做
  • 上海定制化网站开发公司深圳造价信息网官网
  • 做一个京东网站怎么做的framework7做网站
  • 甘肃省住房和建设厅网站首页普通网站建设是什么
  • 兰州公司网站制作微信推送怎么做购物网站
  • 上海网站空间网站后台管理系统多少钱