2
httpcomponents 4.1.2를 사용 중이고 ThreadSafeClientConnManager가 연결이 부족합니다. 이전 커먼즈 HttpClient와는 달리 연결을 해제 할 수있는 방법은 없습니다. 내 목표는 URL에 HTTP POST를하는 다수의 동시 스레드를 갖는 것입니다. 누구나 연결을 '해제'하는 방법에 대한 아이디어가 있습니까? 아니면 다른 방식으로해야합니까? 내 드라이버의 존재와ThreadSafeClientConnManager를 잠글 수 없게하는 방법
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
public class HttpThread implements Runnable
{
private static ThreadSafeClientConnManager cm;
private static HttpClient httpClient;
static
{
cm = new ThreadSafeClientConnManager();
cm.setDefaultMaxPerRoute(10);
cm.setMaxTotal(100);
httpClient = new DefaultHttpClient(cm);
}
private String id;
private int iterations;
public HttpThread(String id, int iterations)
{
this.id= id;
this.iterations = iterations;
}
@Override
public void run()
{
long start = System.currentTimeMillis();
for(int i = 0; i < this.iterations; i++)
{
HttpPost post = new HttpPost("http://127.0.0.1:7001/in/iServlet");
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("p1", ""));
nvps.add(new BasicNameValuePair("p2", "7"));
nvps.add(new BasicNameValuePair("p3", "80027-48taPS4lQVu7q6RjEA40kg-1207276200-75-2-1-0"));
nvps.add(new BasicNameValuePair("p4", "1-30--1-2-_60--2-Y-RED,XL__2-30-5-3-A-"));
try
{
post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
System.out.println("before post: " + i);
HttpResponse response = httpClient.execute(post);
System.out.println("after post: " + i);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
}
}
long stop = System.currentTimeMillis();
System.out.println(this.id + " finished: " + (stop - start) + " ms");
}
}
는 :
public class ThreadTest
{
private ExecutorService executor = Executors.newCachedThreadPool();
protected void spawnThreads(int numberOfThreads, int iterations)
{
for(int i = 1; i <= numberOfThreads; i++)
{
HttpThread thread = new HttpThread("thread-" + i, 100);
executor.execute(thread);
System.out.println("Launching: thread-" + i + " for: " + iterations + " iterations");
}
}
public static void main(String[] args)
{
ThreadTest t= new ThreadTest();
t.spawnThreads(1, 100);
}
}
내 출력은 다음과 같습니다
Launching: thread-1 for: 100 iterations
before post: 0
after post: 0
before post: 1
after post: 1
before post: 2
after post: 2
before post: 3
after post: 3
before post: 4
after post: 4
before post: 5
after post: 5
before post: 6
after post: 6
before post: 7
after post: 7
before post: 8
after post: 8
before post: 9
after post: 9
before post: 10