Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1d40d67

Browse files
Update PoolThreadHttpServer.java
1 parent abbae0c commit 1d40d67

File tree

1 file changed

+19
-35
lines changed

1 file changed

+19
-35
lines changed

‎SocketClasses/src/HTTP_MultiThreadServer/PoolThreadHttpServer.java

Lines changed: 19 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package HTTP_MultiThreadServer;
2-
/*
3-
Создаем простой, однопоточный HTTP сервер,
4-
который принимает некие запросы и генерирует
5-
некий стандартный ответ.
6-
*/
2+
3+
/* Создаем простой, многопоточный HTTP сервер, который принимает некие запросы и генерирует некий стандартный ответ */
4+
75
import java.io.DataInputStream;
86
import java.io.DataOutputStream;
97
import java.io.IOException;
@@ -15,27 +13,18 @@
1513
import java.util.concurrent.Executors;
1614

1715
public class PoolThreadHttpServer {
18-
/*
19-
Для создания сервера, нам понадобится порт,
20-
который он будет прослушивать, этот параметр
21-
мы передадим в ServerSocket.
22-
*/
23-
private final int port;
24-
/* Создаем пул потоков через ExecutorService */
25-
private final ExecutorService socketsPool;
16+
private final int port; // Для создания сервера, нам понадобится порт, который он будет прослушивать, этот параметр мы передадим в ServerSocket
17+
private final ExecutorService socketsPool; // Создаем пул потоков через ExecutorService
2618
private boolean serverStopped = false;
27-
/*
28-
Передаем интересующий нас порт через конструктор
29-
и количество потоков в которых будут обрабатываться
30-
запросы от HTTP клиентов.
31-
*/
19+
20+
/* Передаем интересующий нас порт через конструктор и количество потоков в которых будут обрабатываться запросы от HTTP клиентов */
3221
public PoolThreadHttpServer(int port, int poolSize) {
3322
this.port = port;
3423
this.socketsPool = Executors.newFixedThreadPool(poolSize);
3524
}
25+
3626
/* Метод запускающий наш сервер */
3727
public void runServer(){
38-
3928
try {
4029
/*
4130
1. Создаем ServerSocket и передаем ему порт;
@@ -59,25 +48,21 @@ public void runServer(){
5948
throw new RuntimeException(exception);
6049
}
6150
}
51+
6252
/* Метод обрабатывающий запрос от клиента */
6353
private void processingSocketRequest(Socket clientSocket){
6454
/*
65-
Открываем два потока входящий и исходящий для
66-
получения запросов - request и формирования
67-
ответов - response.
55+
Открываем два потока входящий и исходящий для получения запросов - request и формирования ответов - response.
6856
69-
Естественно в реальности сервер ведет более
70-
сложную работу по обработке запросов и выдаче
71-
соответствующих ответов, в зависимости от
72-
полученного запроса. Но суть не меняется.
57+
Естественно в реальности сервер ведет более сложную работу по обработке запросов и выдаче соответствующих ответов,
58+
в зависимости от полученного запроса. Но суть не меняется.
7359
*/
7460
try(DataInputStream dataInputStream = new DataInputStream(clientSocket.getInputStream());
7561
DataOutputStream dataOutputStream = new DataOutputStream(clientSocket.getOutputStream())) {
76-
/*
77-
1. Получаем запрос и обрабатываем его (handle request).
78-
Выводим на экран запрос от HttpClientTester клиента.
79-
*/
62+
63+
/* 1. Получаем запрос и обрабатываем его (handle request). Выводим на экран запрос от HttpClientTester клиента. */
8064
System.out.println("Request: \n" + new String(dataInputStream.readNBytes(456)));
65+
8166
/* Имитируем замедление обработки запроса от клиента */
8267
try {
8368
Thread.sleep(10000);
@@ -93,24 +78,23 @@ private void processingSocketRequest(Socket clientSocket){
9378
Это будет тело - body нашего ответа.
9479
*/
9580
byte[] responseBody = Files.readAllBytes(Path.of("resources","htmlExample.html"));
81+
9682
/* Формируем header-ы ответа */
9783
byte[] responseHeaders = """
9884
HTTP/1.1 200 OK
9985
content-type: text/html
10086
content-length: %s
10187
""".formatted(responseBody.length).getBytes();
88+
10289
/* Сервер отправляет ответ клиенту */
10390
dataOutputStream.write(responseHeaders);
10491
dataOutputStream.write(System.lineSeparator().getBytes());
10592
dataOutputStream.write(responseBody);
10693

10794
} catch (IOException ioException){
10895
/*
109-
В данном случае мы не пробрасываем исключения выше, а
110-
обрабатываем полученные ошибки, чтобы сервер не
111-
остановился. Например, мы логгируем ошибки, а сервер
112-
продолжает обрабатывать другие запросы, от других
113-
клиентов.
96+
В данном случае мы не пробрасываем исключения выше, а обрабатываем полученные ошибки, чтобы сервер не остановился.
97+
Например, мы логгируем ошибки, а сервер продолжает обрабатывать другие запросы, от других клиентов.
11498
*/
11599
ioException.printStackTrace();
116100
} finally {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /