Http服务器从一个客户端收到多个套接字

时间:2017-10-19 13:28:54

标签: sockets http

我正在使用C ++编写自己的http服务器。服务器具有绑定到端口9999的侦听器。默认情况下,我使用带有keep-alive的HTTP 1.1。服务器使用select来复用IO。

我的问题是,当我在localhost:9999打开浏览器时,我看到从侦听器创建了多个套接字。第一个请求是GET / HTTP 1.1,我的回复是index.html文件,因此客户端可以打开它。以下是此index.html

的草图
<html lang="en" ng-app="myproject">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="stylesheet" href="/css/bootstrap.min.css">
    <link rel="stylesheet" href="/css/myproject.min.css">
  </head>

    <script src="/js/jquery-3.2.1.min.js"></script>
    <script src="/js/angular-1.2.3.min.js"></script>
    <script src="/js/angular-route-1.2.3.min.js"></script>
    <script src="/js/bootstrap.min.js"></script>
    ....

当客户端收到此index.html时,它会依次创建多个请求,要求bootstrap.min.cssmyproject.min.css以及所有剩余的javascript文件(jquery-3.2.1.min.js等)。这是我从服务器的监听器看到的:

incoming http connection created on socket 6 <-- initial request (asking '/' and `favicon`)
server sends index.html through 6
incoming http connection created on socket 7 <-- request for bootstrap.min.css
server sends bootstrap.min.css through 7
incoming http connection created on socket 8 <-- request for myproject.min.css
server sends myproject.min.css through 8
incoming http connection created on socket 9 <-- request for jquery-3.2.1.min.js
server sends jquery-3.2.1.min.js through 9
.... (sockets 6, 7, 8, 9 are alive)

客户端为每个单独的请求创建新的套接字连接对我没有任何意义。我确信我在响应和请求中都打开了keep-alive。我希望只创建一个套接字,在本例中为6,并且以下所有请求都应重用该套接字而不是创建新套接字。我错过了什么吗?

0 个答案:

没有答案