Я тестирую это через wrk со следующими параметрами:
Код: Выделить всё
wrk -t4 -c100 -d10s http://localhost:8080Но, пожалуйста, укажите мне несколько хороших ресурсов, посвященных изучению TCP-сокетов и созданию HTTP-серверов, а также тому, как я могу увеличить пропускную способность и производительность. В частности, было бы неплохо на Java.
Мой текущий диагноз: возможно поддерживать живые соединения, но я не слишком много об этом знаю.
Первое внедрение:
Код: Выделить всё
import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;
public class SimpleHttpServer {
private static final byte[] RESPONSE = ("HTTP/1.1 200 OK\r\n" +
"Content-Type: text/plain\r\n" +
"Content-Length: 12\r\n" +
"Connection: keep-alive\r\n" +
"\r\n" +
"Hello World!").getBytes(StandardCharsets.US_ASCII);
public static void main(String[] args) throws IOException {
int port = 8080;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server listening on port " + port);
while (true) {
try (Socket clientSocket = serverSocket.accept()) {
handleClient(clientSocket);
} catch (IOException e) {
System.err.println("Error accepting client connection: " + e.getMessage());
}
}
}
}
private static void handleClient(Socket clientSocket) {
try (InputStream in = clientSocket.getInputStream();
OutputStream out = clientSocket.getOutputStream()) {
byte[] buffer = new byte[8192];
int bytesRead = in.read(buffer);
out.write(RESPONSE);
out.flush();
} catch (IOException e) {
System.err.println("Error handling client: " + e.getMessage());
}
}
}
Код: Выделить всё
Running 10s test @ http://localhost:8080
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 3.23ms 5.33ms 112.16ms 99.63%
Req/Sec 2.65k 1.12k 3.66k 84.62%
13852 requests in 10.08s, 1.33MB read
Socket errors: connect 0, read 16674, write 0, timeout 0
Requests/sec: 1373.97
Transfer/sec: 135.52KB
Код: Выделить всё
import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;
public class SimpleHttpServer {
private static final byte[] RESPONSE = ("HTTP/1.1 200 OK\r\n" +
"Content-Type: text/plain\r\n" +
"Content-Length: 12\r\n" +
"Connection: keep-alive\r\n" +
"\r\n" +
"Hello World!").getBytes(StandardCharsets.US_ASCII);
public static void main(String[] args) throws IOException {
int port = 8080;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server listening on port " + port);
while (true) {
try (Socket clientSocket = serverSocket.accept()) {
handleClient(clientSocket);
} catch (IOException e) {
System.err.println("Error accepting client connection: " + e.getMessage());
}
}
}
}
private static void handleClient(Socket clientSocket) {
try (InputStream in = clientSocket.getInputStream();
OutputStream out = clientSocket.getOutputStream()) {
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(RESPONSE);
out.flush();
}
} catch (IOException e) {
System.err.println("Error handling client: " + e.getMessage());
}
}
}
Код: Выделить всё
Running 10s test @ http://localhost:8080
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 24.20us 13.95us 5.83ms 97.12%
Req/Sec 39.67k 2.53k 43.48k 69.31%
398573 requests in 10.10s, 38.39MB read
Socket errors: connect 0, read 83, write 0, timeout 0
Requests/sec: 39457.15
Transfer/sec: 3.80MB
Подробнее здесь: https://stackoverflow.com/questions/790 ... erformance
Мобильная версия