Когда выходной поток закрывается в сервлетах, означает ли это, что сокетное соединение также закрывается? - PullRequest
0 голосов
/ 22 июня 2019

Недавно я решил начать создавать собственный контейнер сервлетов, чтобы лучше понять, как обычно работают apache tomcat и серверные приложения. Поэтому для этого мне нужно изучить программирование сокетов. Итак, насколько я знаю, когда выходной поток сокета закрывается, что соединение сокета также закрывается. Я не могу понять, как заставить Apache Tomcat не закрывать соединение сокета после http-запроса / ответа взаимодействия оптимизировать мое приложение.

Вот фрагмент кода:

Socket socket;
PrintWriter pw = new PrintWriter(socket.getOutputStream());
pw.close();

Закрытие возвращенного OutputStream закроет связанный сокет.

Итак, если другой сокет попытается получить что-то из входного потока, он получит исключение, что сокет закрыт. Я только что дал голые сокеты без протокола приложения (HTTP, WS ...)

Но что происходит, когда есть сервлет и его выходной поток закрывается программистом, как это:

// The http request has the header - Keep-alive : true   

public class DisplayHeader extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse 
   response)
   throws ServletException, IOException {

   PrintWriter out = response.getWriter();
   out.close();

}

Насколько мне известно, закрытие любого верхнего потока вызовет метод close (), остальные потоки останутся ниже, пока базовый поток не закроется. Итак, после закрытия печатающего устройства выходной поток сокета также был закрыт. Итак, может ли решение просто очистить содержимое буфера и все и не использовать метод close, пока он не понадобится?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...