gpt4 book ai didi

java - 我可以并行创建 Java HttpServer 线程/处理请求吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:45 34 4
gpt4 key购买 nike

我按照我在网上找到的教程,使用 Sun 的轻量级 HttpServer 构建了一个简单的 HttpServer。

基本上主要的功能是这样的:

public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
//Create the context for the server.
server.createContext("/", new BaseHandler());

server.setExecutor(null); // creates a default executor
server.start();
}

我已经实现了 BaseHandler 接口(interface)的方法来处理 Http 请求并返回响应。

static class BaseHandler implements HttpHandler {
//Handler method
public void handle(HttpExchange t) throws IOException {

//Implementation of http request processing
//Read the request, get the parameters and print them
//in the console, then build a response and send it back.
}
}

我还创建了一个通过线程发送多个请求的客户端。每个线程向服务器发送以下请求:

http://localhost:8000/[context]?int="+threadID

在每个客户端运行时,请求似乎以不同的顺序到达服务器,但它们是以串行方式提供的。

如果可能的话,我希望以并行方式处理请求。

例如,是否可以在单独的线程中运行每个处理程序,如果可以,这样做是不是一件好事。

或者我应该完全放弃使用 Sun 的轻量级服务器并专注于从头开始构建一些东西吗?

感谢您的帮助。

最佳答案

正如您在 ServerImpl 中看到的那样,默认执行程序只是“运行”任务:

  157       private static class DefaultExecutor implements Executor {
158 public void execute (Runnable task) {
159 task.run();
160 }
161 }

你必须为你的 httpServer 提供一个真正的执行器,就像那样:

server.setExecutor(java.util.concurrent.Executors.newCachedThreadPool());

您的服务器将并行运行。小心,这是一个非限制执行器,请参阅 Executors.newFixedThreadPool限制线程的数量。

关于java - 我可以并行创建 Java HttpServer 线程/处理请求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14729475/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com