【发布时间】:2017-04-28 18:35:28
【问题描述】:
我的团队正在使用 Java 从头开始构建一个基本的 HTTP 服务器,但是一旦我们的读取器线程用完请求文本以从套接字的输入流中读取,它们就会阻塞。 与questions asked previously 不匹配的我们情况的一些独特点:
- 我们希望在处理请求并产生响应以发回时保持套接字打开
- 我们一开始并不解析数据,而是首先从套接字中读取数据,然后将整个数据放入一个恢复文件中。然后我们开始从文件中解析和验证,以确保在发生灾难时我们不会丢失请求。
基本代码:
public void readSocket() {
receivedTime = System.currentTimeMillis();
requestFile = new File("recovery/" + receivedTime + ".txt");
try(
FileWriter fw = new FileWriter(requestFile);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter out = new BufferedWriter(fw);
)
{
String line;
while((line = in.readLine()) != null){ //TODO: this is where it blocks after reading past the last line of the request.
out.write(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
【问题讨论】:
-
为什么不使用 Java 自己的 HttpServer 类呢?为什么要缓存容灾请求?如果出现问题,客户端无论如何都会消失,因此您无法发回响应,那么为什么要恢复呢? HTTP 本来就是无状态的。让客户端重新连接并再次发送请求。
-
项目规范要求我们自己构建。