gpt4 book ai didi

java - Web 浏览器向自定义 Java 服务器发送多个请求

转载 作者:行者123 更新时间:2023-12-03 05:32:08 25 4
gpt4 key购买 nike

我必须制作一个自定义 Java 线程池服务器作为一个更大项目的一部分。

我遇到了一个问题,它至少从一整天一夜开始就伤害了我大脑内的神经元。

我所做的很简单(遵循在线资源)。我有一个 while 循环,它永远循环。收到请求,它接受请求并将其发送到线程池(Java 执行器框架)。

protected ExecutorService threadPool = Executors.newFixedThreadPool(10);

while(! isStopped()){
Socket clientSocket = null;
try {
clientSocket = this.serverSocket.accept();
} catch (IOException e) {
if(isStopped()) {
System.out.println("Server Stopped.") ;
return;
}
throw new RuntimeException("Error accepting client connection", e);
}
this.threadPool.execute(
new Task(clientSocket,
"Test")
);
//System.out.println("Processed");
}
this.threadPool.shutdown();

没有比这更简单的了吗?

也是任务类,只接受一个套接字,并写入它的输出流

public class Task implements Runnable{

protected Socket clientSocket = null;
protected String serverText = null;

public Task(Socket clientSocket, String serverText) {
this.clientSocket = clientSocket;
this.serverText = serverText;
}

public void run() {
try {
InputStream input = clientSocket.getInputStream();
OutputStream output = clientSocket.getOutputStream();
long time = System.currentTimeMillis();
output.write(("HTTP/1.1 200 OK\n\nWorkerRunnable: " +
this.serverText + " - " +
time +
"").getBytes());
output.close();
input.close();
System.out.println("Request processed: " + time);
} catch (IOException e) {
//report exception somewhere.
e.printStackTrace();
}
}
}

问题是这样的。Chrome每当我在 Chrome 中编写 localhost:9004 时,我都会在控制台上多次看到 (Request Processed: time),即使我只点击一次 URL。

这怎么可能? 。发生的情况是由于某种原因向服务器发起了多个请求,或者 Java 执行器框架出现故障,可能多次执行一个请求等等? 。我不相信这两个原因都是正确的

火狐浏览器

当我点击 FF 的 url 时,每次点击服务器时,请求处理都会正确地出现在控制台上一次。 (很少有像 chrome 那样的行为,比如在某些随机时刻,它会针对单个 URL 命中显示两条“请求已处理”消息)

自定义 Java 客户端当我从定制的 Java 客户端应用程序中点击 URL 时,服务器应用程序的控制台窗口正确地为每个请求显示一个 Request Processed 标记。

我什至点击了该 URL 10 次,在 for 循环中速度极快,并且我在服务器端正确收到了 10 条请求已处理消息

IE与 Chrome 相同。

你们能给我一些有关情况的见解吗? 。对于问题的长度,我深表歉意。

谢谢。

最佳答案

浏览器出于不同目的发出了多个请求。对于您所知道的普通 HTTP 请求,然后是一个 if-modified 请求,该请求应该只抓取 header ,最后是一个对网站图标的请求。

打印出浏览器发送的实际请求可能会给您带来启发。 ;)

关于java - Web 浏览器向自定义 Java 服务器发送多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17986806/

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