首页 > 代码库 > 关于 tomcat nio connector, servlet 3.0 async, spring mvc async 的关系
关于 tomcat nio connector, servlet 3.0 async, spring mvc async 的关系
tomcat 的 org.apache.coyote.http11.Http11NioProtocol Connector 是一个使用 Java NIO 实现的异步 accept 请求的 connector
它的作用是不需要为每个请求建立一个线程, 而是使用固定的accept线程 accept 多个请求, 然后排队处理.
大概的意思是使用固定的 acceptThread 来 accept n 个请求, 然后将请求入队, 最后使用固定的 requestProcessingThread 来处理业务逻辑, 业务逻辑的处理实际上也是同步的
Http11NioProtocol 从 tomcat 6.x 开始支持
servlet 3.0 从 tomcat 7.x 开始支持, 它使得业务处理也可以异步, Spring 3.2 的 async 变成也是基于 servlet 3.0 来做的, 例如
@ResponseBody @RequestMapping("/{surl}") public DeferredResult<ResponseEntity<String>> redirect(@PathVariable String surl) { final DeferredResult<ResponseEntity<String>> dr = new DeferredResult<ResponseEntity<String>>(TIMEOUT_MS, ResponseEntityResult.TIMEOUT); // ... 异步的做一些事情, 最后将结果 set 到 DeferredResult new Thread(new AsyncTask(dr)).start(); return dr; } private static class AsyncTask implements Runnable { private DeferredResult result; private AsyncTask(DeferredResult result) { this.result = result; } @Override public void run() { // 业务逻辑 // ... // 设置结果 result.setResult(result); } }
这样 tomcat 的 requestProcessingThread 可以解脱出去处理别的请求, 而且 servlet-2.5 你只能把最后结果处理出来, 最后 return, 而不能放到别的线程处理
关于 tomcat nio connector, servlet 3.0 async, spring mvc async 的关系
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。