0

我做了一个作为自动购买者的应用程序。使其尽可能快对于比其他任何人更快地到达该项目至关重要。我正在使用无限循环(即 for(;;))来发出连续的 http 请求,然后解析 JSON 结果。

有谁知道如何同时提出多个请求?我目前每秒处理大约 3 个请求。java也不适合这种应用程序吗?我应该考虑使用另一种语言吗?

非常感谢你!

编辑:我使用类似的搜索功能

for(;;){
search(323213, 67);
search(376753, 89);
}

public void search(int itemID, int maxPrice) {

// sets the http request with the need cookies and headers
// processes the json. If (itemId==x&&maxPrice>y) ==> call buy method

}
4

4 回答 4

2

在无限循环中发出请求将使您的 IP 被任何主动监控滥用的服务阻止。

如果您希望在短时间内并行发送一堆请求,请启动多个线程并让每个线程提交一个请求。

Java 是一个非常强大的多线程平台。

于 2012-11-12T19:54:05.393 回答
1

使用ScheduledThreadPoolExecutor,您可以安排一个 runnable 以固定速率运行,例如每 10 秒一次,而无需担心自己产生线程。

于 2012-11-12T19:58:29.080 回答
0
  1. 获取请求字符串 url = " http://www.google.com/search?q=developer ";

    HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet(url);
    
    // add request header
    request.addHeader("User-Agent", USER_AGENT);
    
    HttpResponse response = client.execute(request);
    
  2. 字符串 url = " https://selfsolve.apple.com/wcResults.do ";

    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(url);
    
    // add header
    post.setHeader("User-Agent", USER_AGENT);
    
    List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
    urlParameters.add(new BasicNameValuePair("sn", "C02G8416DRJM"));
    urlParameters.add(new BasicNameValuePair("cn", ""));
    urlParameters.add(new BasicNameValuePair("locale", ""));
    urlParameters.add(new BasicNameValuePair("caller", ""));
    urlParameters.add(new BasicNameValuePair("num", "12345"));
    
    post.setEntity(new UrlEncodedFormEntity(urlParameters));
    
    HttpResponse response = client.execute(post);
    
于 2014-09-13T09:34:31.170 回答
0

这是另一篇文章,它提供了一个很好的例子来说明如何使用线程来做到这一点: How do you create an asynchronous HTTP request in JAVA?

如果您熟悉 JavaScript,Node.JS 是另一个不错的选择。使用 Node.JS 无需担心线程,因为请求是异步完成的。

于 2012-11-12T19:57:59.503 回答