ZVVQ代理分享网

Java框架如何实现非阻塞式编程?(java什么是阻塞

作者:zvvq博客网
导读java 框架通过以下方式实现非阻塞式编程:servlet 容器使用 nio 技术处理请求,将请求放入队列中由工作线程池处理。异步 servlet 允许 servlet 以非阻塞方式处理请求,委托给异步线程池。

java 框架根据以下方式完成非阻塞式编程:servlet 容器应用 nio 技术处理要求,将要求放进队列中由工作线程池处理。异步servlet 容许servlet 以非阻塞方式处理要求,交由异步线程池。vert.x 应用事件总线系统,容许部件以非阻塞方法通信处理要求。 copyright zvvq

内容来自samhan666

Java 架构如何做到非阻塞式编程

内容来自samhan666

非阻塞式编程是一种编程范式,容许应用软件回应事情(比如网络请求或文档 I/O 操作)而不用等他们进行。可以将要求放进序列并由其他进程解决,Java 架构能够实现非阻塞式编程。这使得应用软件能够同时处理多个要求,从而提高并发性。 内容来自zvvq,别采集哟

怎么使用Java 架构完成非阻塞式编程 内容来自samhan

Servlet 容器Servlet 容器,比如 Apache Tomcat 和 Jetty,应用 NIO(非阻塞式 I/O) 技术来解决传到要求。NIO 使 Servlet 容器可以监控多个套接字,并把传到要求放进队列中,便于由工作线程池解决。 本文来自zvvq

// Servlet(应用 Servlet 3.1+API) 内容来自samhan

@WebServlet(urlPatterns = "/hello")

内容来自zvvq,别采集哟

public class HelloServlet extends HttpServlet {

zvvq

@Override zvvq

protected void doGet(HttpServletRequest req, HttpServletResponse resp) { 本文来自zvvq

// 解决要求 copyright zvvq

// ...

copyright zvvq

}

zvvq好,好zvvq

} 本文来自zvvq

Java EE异步 ServletJava EE异步 Servlet 是 Servlet 3.1+的一个特点,它允许servlet 以非阻塞方式处理要求。根据启用 AsyncContextstart() 方式,servlet 能将要求委任给一个异步线程池。异步线程池将解决要求,而servlet 进程可以继续接纳别的要求。 内容来自zvvq,别采集哟

// 异步 Servlet(应用 Servlet 3.1+API) zvvq好,好zvvq

@WebServlet(urlPatterns = "/hello") copyright zvvq

public class HelloAsyncServlet extends HttpServlet {

内容来自samhan666

@Override

内容来自samhan666

protected void doGet(HttpServletRequest req, HttpServletResponse resp) { 本文来自zvvq

AsyncContext asyncContext = req.startAsync(); 本文来自zvvq

// 异步处理要求,并在结束时启用 onComplete() 方式 内容来自zvvq

asyncContext.addListener(new AsyncListener() { copyright zvvq

@Override

zvvq

public void onComplete(AsyncEvent event) { 内容来自samhan666

// 进行后处理

本文来自zvvq

} 内容来自zvvq

});

内容来自zvvq

// 运行异步线程,解决要求 zvvq.cn

asyncContext.start(new Runnable() {

内容来自samhan

@Override

copyright zvvq

public void run() { 内容来自samhan

// 解决要求

copyright zvvq

// ...

内容来自samhan666

asyncContext.complete(); // 结束后通告servlet 进程

本文来自zvvq

} copyright zvvq

}); 内容来自zvvq

}

copyright zvvq

} 内容来自samhan

Vert.xVert.x 是一个流行的异步编程架构。它使用事件总线去处理传到要求。事件总线是一个基于消息的系统,它允许部件(如 HTTP 服务器、数据库或文件系统)以非阻塞方法进行通信。 内容来自zvvq

//Vert.x HTTP 要求解决

本文来自zvvq

import io.vertx.core.Vertx; zvvq

import io.vertx.core.http.HttpServer;

内容来自samhan666

public class VertxHttpServer {

内容来自samhan666

public static void main(String[] args) {

内容来自zvvq,别采集哟

Vertx vertx = Vertx.vertx(); 内容来自zvvq,别采集哟

HttpServer server = vertx.createHttpServer(); zvvq好,好zvvq

server.requestHandler(req -> {

本文来自zvvq

// 解决要求 zvvq

// ... 内容来自samhan666

});

内容来自samhan666

server.listen(8080); 本文来自zvvq

}

内容来自zvvq,别采集哟

} zvvq好,好zvvq

实战案例 应用 Servlet 容器来构建一个简单的 Web 服务器

本文来自zvvq

importjavax.servlet.ServletException;

内容来自samhan

importjavax.servlet.annotation.WebServlet; zvvq.cn

importjavax.servlet.http.HttpServlet;

内容来自zvvq,别采集哟

importjavax.servlet.http.HttpServletRequest; copyright zvvq

importjavax.servlet.http.HttpServletResponse; 内容来自samhan

importjava.io.IOException; 内容来自zvvq

@WebServlet(urlPatterns="/hello")

内容来自samhan

publicclassHelloServletextendsHttpServlet{ 内容来自zvvq

@Override 本文来自zvvq

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throws ServletException,IOException{

zvvq.cn

resp.getWriter().write("HelloWorld!"); zvvq.cn

} 内容来自zvvq,别采集哟

} 本文来自zvvq

应用 Vert.x 来构建一个简单的闲聊服务器 zvvq

import io.vertx.core.Vertx;

zvvq.cn

import io.vertx.core.VertxOptions;

zvvq

import io.vertx.core.http.HttpServer;

内容来自samhan666

import io.vertx.core.http.HttpServerOptions;

copyright zvvq

import io.vertx.core.http.WebsocketServerOptions; 本文来自zvvq

public class VertxChatServer { 内容来自samhan

public static void main(String[] args) {

内容来自samhan

// 开启 TCP_NODELAY 选项以提升网络性能

内容来自samhan666

VertxOptions options = new VertxOptions().setTcpSendBufferSize(16384).setReceiveBufferSize(16384).setTcpNodelay(true);

zvvq.cn

Vertx vertx = Vertx.vertx(options);

内容来自zvvq,别采集哟

// 配备 Websocket 服务器选项 copyright zvvq

WebsocketServerOptions websocketOptions = new WebsocketServerOptions().setIdleTimeout(0);

zvvq.cn

// 配备 HTTP 服务器选项

copyright zvvq

HttpServerOptions serverOptions = new HttpServerOptions().setUsePooledBuffers(true).setCompressionSupported(true).setCompressedMimeType("text/html;charset=utf-8"); zvvq好,好zvvq

// 建立 HTTP 服务器

内容来自samhan666

vertx.createHttpServer(serverOptions).websocketHandler(websocket -> {

本文来自zvvq

// 解决 websocket 信息

zvvq.cn

}).listen(8080); 内容来自zvvq,别采集哟

}

内容来自samhan

} copyright zvvq

以上就是Java架构如何做到非阻塞式编程?的详细内容,大量请关注其他类似文章! zvvq好,好zvvq