最近,我决定开始创建自己的 servlets 容器,以更好地了解 apache tomcat 和服务器应用程序通常是如何工作的。所以,为此,我需要学习套接字编程。所以,据我所知,当套接字的输出流被关闭时,套接字连接也被关闭。我不明白如何让 apache tomcat 在 http 请求/响应交互后不关闭套接字连接优化我的应用程序。
这是代码片段:
Socket socket;
PrintWriter pw = new PrintWriter(socket.getOutputStream());
pw.close();
关闭返回的 OutputStream 将关闭关联的套接字。
所以,如果另一个套接字试图从输入流中获取一些东西,那么它将得到一个套接字已关闭的异常。我刚刚给出了没有应用程序协议的裸套接字(HTTP,WS ...)
但是,当有一个 servlet 并且它的输出流被这样的程序员关闭时会发生什么:
// 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 方法?