如何加速 HTTP POST 请求?

问题描述 投票:0回答:1

我正在为大学课程表制作一个 REST API,并将数据插入 SQL 需要很长时间。我的程序的工作原理是从我的大学网站下载 PDF 时间表,剥离其中的文本并将其打印到文本文件中,然后解析该文本文件以获取课程详细信息。一切功能齐全,只是效率不高。

找到课程详细信息后,将从其余模型类创建一个 Course 对象并将其存储在列表中。

public class Parser {
    private static List<Course> courses;

    public static void parse(File file) {
        [collecting data...]

        Course course = new Course(crn, subject, number, title, department, hours, instructor, size, seats, semester, term);
        courses.add(course);
    }

    public static List<Course> getCourses() {
        return courses;
    }
}

找到所有课程后,调用此方法将它们放入数据库中。加载 15,000 个课程大约需要 3 分钟。

/** Constructs a JSON request body and posts course data to the server. */
public static void saveCourses(List<Course> courses) throws URISyntaxException, IOException, InterruptedException {
    for (int i = 0; i < courses.size(); i++) {
        Gson gson = new Gson();
        String json = gson.toJson(courses.get(i));
        HttpClient httpClient = HttpClient.newHttpClient();
        HttpRequest httpRequest = HttpRequest.newBuilder()
            .uri(new URI("http://localhost:8080/course/save"))
            .header("Content-Type", "application/json")
            .POST(BodyPublishers.ofString(json))
            .build();
        httpClient.send(httpRequest, BodyHandlers.ofString());
    }
}

我不确定是 toJson() 调用还是实际请求花费了这么长时间,但是我能做些什么来使我的程序更快?

java http
1个回答
0
投票

是的。总而言之,问题不在于服务器上的处理效率低下,而在于您做了很多请求。我看到两种方法可以解决这个问题:第一种方法不需要在服务器端进行修改,那就是使用异步请求。如果您的服务器无法支持 15'000 个并发请求,请使用 100 或 1000 个请求的批次。另一种方法包括向服务器添加一种方法来发布

Course
列表而不是单个列表,并在单个请求中或批量发送整个列表。对于后一种情况,您可以尝试使用异步请求进一步优化。

© www.soinside.com 2019 - 2024. All rights reserved.