在Java中处理HTTP POST REQUEST的最有效方法

时间:2013-05-04 23:19:09

标签: java post httprequest

我有一个 respond.php ,它为每个带有不同标头数据的HTTP POST返回一个JSON数据。 一次生成30个请求并处理其响应数据的最有效方法是什么?这需要非常高效,因为硬件的性能相当有限。

2 个答案:

答案 0 :(得分:3)

“一次生成30个请求并处理其响应数据”,这一点尚不清楚。

但是>>YOUR<<时间(和我们的时间)的最有效使用是以直接的方式实现这一点,然后看看性能是否足够好。当简单的解决方案足够好时,花费很多额外的时间编写一个超高效的解决方案毫无意义。

简单的解决方案是创建30个客户端线程,并使用HttpUrlConnection让每个线程发送一个POST请求。这是否“有效”取决于哪些资源是瓶颈。 (当然,这同样适用于如何使其更“高效”的想法。)说硬件“相当有限的性能”并没有真正给我们提供很多线索。 ..

一旦你有一个简单的解决方案,并且你已经确定了实际的瓶颈区域(客户端CPU?线程堆栈?网络速度?)......我们可以就如何使代码更快地提出有意义的建议。但是,通过要求“最有效”的解决方案,您只是鼓励人们猜测瓶颈是什么。


最后一点。当你说“最有效”时,有两种方法可以解释它。您可能意味着,一种解决方案,可以在最短的时间内发送请求并处理响应。或者,您可能意味着在客户端和/或服务器上放置最少的资源(CPU和/或内存和/或网络带宽)的解决方案。这不仅仅是一个狡辩。 “高效”的不同风格需要明显不同的解决方案。

答案 1 :(得分:-1)

使用这些高级api代码,代码更清晰,更易于使用。

public static void main(String args[]) {
    int THREAD_COUNT = 30;
    ExecutorService executorService = Executors.newFixedThreadPool(THREAD_COUNT);
    //Add the enw jobs where we just insert
    List<Callable<Void>> jobs = new ArrayList<Callable<Void>>();
    for (int i = 0; i < THREAD_COUNT; i++) {
        jobs.add(new Callable<Void>() {
            @Override
            public Void call() throws Exception {
                URL url = new URL("http://yourserver.com/respond.php");
                URLConnection conn = url.openConnection();
                conn.setDoInput(true);                  
                // Here is where you would use a JSON parser library to parse from the conn.getInputStream method.
                // Don't forget to close the input stream.
                // And then you can handle and do stuff here.
                return null; //aren't interested in the returned value
            }
        });
    }
    executorService.invokeAll(jobs);
}