HTTP 요청을 통해 서버에 대한 여러 요청을 처리하는 응용 프로그램이 있습니다. 나는 응답을 벤치 마크하려고 노력하고있다. 나는 속도면에서 무엇을 기대해야하는지 모른다. 동일한 샘플을 테스트하기 위해이 샘플 프로그램을 작성했습니다.이 프로그램에서 기대해야 할 속도는 무엇입니까? 내가 느끼는 초당 약 4000 건의 요청이 QUITE보다 적습니다. 친절하게 도와주세요.HTTP 서버 속도
HttpClient를 :
package my.service;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;
public class TestClient {
public static void main(String[] args) throws Exception {
Date date = new Date();
for (int i = 0; i < 100000; i++) {
URL url = new URL("http://192.168.5.116:9999/testSpeed");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
InputStream stream = conn.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1];
while (stream.read(b) != -1) {
bos.write(b);
}
byte[] byteArray = bos.toByteArray();
String response = new String(byteArray);
if (Integer.parseInt(response) % 1000 == 0) {
System.out.println("Response from server is --> " + response);
}
}
Date d1 = new Date();
System.out.println(d1.getTime() - date.getTime());
}
}
HTTP 서버 : 모든
package my.service;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class TestServer {
public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(9999), 0);
ExecutorService executorService = Executors.newFixedThreadPool(10);
server.setExecutor(executorService);
server.createContext("/testSpeed", getHandler());
server.start();
}
private static HttpHandler getHandler() {
return new TestHandler();
}
private static class TestHandler implements HttpHandler {
int i = 0;
@Override
public void handle(HttpExchange request) throws IOException {
i++;
if (i % 1000 == 0) {
System.out.println("Number of requests received --> " + i);
}
String response = i + "";
request.sendResponseHeaders(200, response.getBytes().length);
OutputStream os = request.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
}
잘못된 접근입니다. 이러한 기본적인 테스터에는 최적화되지 않은 스레드 풀 관리 및 실제 비즈니스 논리의 부적절한 시뮬레이션과 같은 여러 가지 결함이 있습니다. 대신 애플리케이션이 처리 할 것으로 예상되는로드 유형을 확인하고 앱이 해당 요구 사항을 충족하는지 확인해야합니다. 필요하지 않은 경우 시간은 어디에서 취해지며 부족한 점을 해결하는 방법은 무엇입니까? – PaulProgrammer
최적화가 좋아? 비즈니스 로직은 매우 간단합니다. 문제가 있다고 생각하지 않습니다. 스레드 풀을 최적화하는 방법? – LPD
잘 모르겠습니다. 이 예제는 너무 간단하여 실제로 가치있는 통찰력을 제공하지 못합니다. 컨설팅 서비스를 원할 경우 다른 채널에서 나에게 연락하십시오. – PaulProgrammer