Asynchronous HTTP Client for Java

后端 未结 13 1505
梦谈多话
梦谈多话 2020-12-01 05:01

As a relative newbie in the Java world, I am finding many things frustratingly obtuse to accomplish that are relatively trivial in many other frameworks. A primary example i

相关标签:
13条回答
  • 2020-12-01 05:13

    If you haven't looked at it already, check out the Java 5 java.util.concurrent -- it makes multi-threaded apps much easier to develop. You can set up a ThreadPoolExecutor that manages, say, four Threads. You then feed the pool any number of tasks to complete. Each task is a Runnable. The ThreadPoolExecutor will queue up the Runnable tasks and feed them to available Threads in parallel. The Pool's afterExecute() method is called when each Runnable task completes.

    I vividly remember writing a fetch thread pool for a web browser written in Java back in 1999, and it was a bear to get right. Last month I wrote a load tester for a web server. The tester has a ThreadPoolExecutor that has n threads, and the Runnable tasks I feed it each fetch a page using Apache HTTP Client. It took just an hour or two to get it working reasonably well. I think you'll like java.util.concurrent coupled with Apache HTTP Client, though it sounds like you'll need to do some customization for progress indication.

    (Note that Apache HTTP Client does its own thread pooling, and the default configuration limits you to 20 threads max, and only two to each web server.)

    Update: Here's the link to Apache HTTP Client. Be sure to read up on MultiThreadedHttpConnectionManager, it's what handles the connection pool, and it's not shown in the most basic example.

    0 讨论(0)
  • 2020-12-01 05:15

    Use the "Async Http Client" formerly called ning http client library. See http://code.ning.com/2010/03/introducing-nings-asynchronous-http-client-library/

    Now Available at GitHub https://github.com/ning/async-http-client

    0 讨论(0)
  • 2020-12-01 05:16

    Version 4.0 of Apache Commons HttpClient (now in HttpComponents/HttpCore) also support Java's NIO (non-blocking IO). I think this is your best bet.

    0 讨论(0)
  • 2020-12-01 05:16

    So, it is probably worth considering that actionscript and Java don't server the same niche. For example, Java does make some things more tedious - but usually that is to give the user more options in how, for example, an HTTP connection is executed, whereas actionscript might abstract details or possible errors away for ease of use. But, your point still stands.

    I myself am not aware of an asynchronous HTTP client for Java. Alex Martelli's answer talks about Java's NIO, which is a good answer if you are interested in implementing the HTTP protocol in your own code. NIO will let you use sockets to connect to the web server - but then you have to manually create your own GET requests and parse the incoming HTTP headers/data.

    Another option is to use the java.net.URL classes - and you can find many tutorials for those online and on stackoverflow. You can wrap those in threads - so your java program has multiple threads of execution.

    But then you run into the problem of synchronization. Which I agree, is a pain, but then it offers a more granular level of flexibility.

    (I realize that this doesn't answer your question - and if anybody actually knows of a java facility to do asynchronous http requests, I'd be interested to know!)

    0 讨论(0)
  • 2020-12-01 05:21

    I'd recommend firing separate threads for that.

    0 讨论(0)
  • 2020-12-01 05:24

    The Jetty HTTP client is asynchronous.

    0 讨论(0)
提交回复
热议问题