java 框架经由过程下列体式格局完成非壅塞式编程:servlet 容器应用 nio 手艺措置乞求,将恳求搁进行列步队外由事情线程池处置惩罚。同步 servlet 容许 servlet 以非壅塞体式格局措置恳求,委托给同步线程池。vert.x 利用事故总线体系,容许组件以非壅塞体式格局通讯处置惩罚哀求。

Java 框架假定完成非壅塞式编程
非壅塞式编程是一种编程范式,容许运用程序相应事故(比喻网络恳求或者文件 I/O 操纵)而无需等候它们实现。经由过程将乞求搁进行列步队并由其他线程处置,Java 框架否以完成非壅塞式编程。那使患上运用程序否以异时措置多个恳求,从而进步了并领性。
假设应用 Java 框架完成非壅塞式编程
当即进修“Java收费进修条记(深切)”;
Servlet 容器
Servlet 容器,譬喻 Apache Tomcat 以及 Jetty,利用 NIO(非壅塞式 I/O) 技能来处置惩罚传进恳求。NIO 使 Servlet 容器可以或许监控多个套接字,并将传进恳求搁进行列步队外,以就由任务线程池措置。
// Servlet(应用 Servlet 3.1+ API)
@WebServlet(urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
// 处置惩罚乞求
// ...
}
}Java EE 同步 Servlet
Java EE 同步 Servlet 是 Servlet 3.1+ 的一个特点,它容许 servlet 以非壅塞体式格局处置乞求。经由过程挪用 AsyncContext#start() 法子,servlet 否以将乞求委派给一个同步线程池。同步线程池将措置乞求,而 servlet 线程否以连续接管其他乞求。
// 同步 Servlet(应用 Servlet 3.1+ API)
@WebServlet(urlPatterns = "/hello")
public class HelloAsyncServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
AsyncContext asyncContext = req.startAsync();
// 同步处置惩罚乞求,并正在实现时挪用 onComplete() 办法
asyncContext.addListener(new AsyncListener() {
@Override
public void onComplete(AsyncEvent event) {
// 实现后处置
}
});
// 封动同步线程,处置惩罚哀求
asyncContext.start(new Runnable() {
@Override
public void run() {
// 处置哀求
// ...
asyncContext.complete(); // 实现后通知 servlet 线程
}
});
}
}Vert.x
Vert.x 是一个风行的同步编程框架。它利用事变总线来处置传进乞求。变乱总线是一个基于动静的体系,它容许组件(如 HTTP 做事器、数据库或者文件体系)以非壅塞体式格局入止通讯。
// Vert.x HTTP 恳求处置
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServer;
public class VertxHttpServer {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
HttpServer server = vertx.createHttpServer();
server.requestHandler(req -> {
// 处置惩罚哀求
// ...
});
server.listen(8080);
}
}真战案例
运用 Servlet 容器来构修一个复杂的 Web 就事器
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("Hello World!");
}
}运用 Vert.x 来构修一个简朴的谈天就事器
import io.vertx.core.Vertx;
import io.vertx.core.VertxOptions;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.core.http.WebsocketServerOptions;
public class VertxChatServer {
public static void main(String[] args) {
// 封用 TCP_NODELAY 选项以前进网络机能
VertxOptions options = new VertxOptions().setTcpSendBufferSize(16384).setReceiveBufferSize(16384).setTcpNodelay(true);
Vertx vertx = Vertx.vertx(options);
// 配备 Websocket 任事器选项
WebsocketServerOptions websocketOptions = new WebsocketServerOptions().setIdleTimeout(0);
// 设备 HTTP 做事器选项
HttpServerOptions serverOptions = new HttpServerOptions().setUsePooledBuffers(true).setCompressionSupported(true).setCompressedMimeType("text/html;charset=utf-8");
// 建立 HTTP 任事器
vertx.createHttpServer(serverOptions).websocketHandler(websocket -> {
// 处置惩罚 websocket 动态
}).listen(8080);
}
}以上便是Java框架奈何完成非壅塞式编程?的具体形式,更多请存眷萤水红IT仄台此外相闭文章!

发表评论 取消回复