Page 112 - HTTP权威指南
P. 112

图 4-1 显示了 Web 浏览器是如何用 HTTP 从 Joe 的五金商店下载 power-tools.html
                 页面的。图 4-6 中的伪代码说明了可以怎样通过套接字 API 来凸显客户端和服务器
                 在实现 HTTP 事务时所应执行的步骤。









                                    客户端                      服务器
                                                      (S1)创建新的套接字(socket)
                                                      (S2)将套接字绑定到端口80上去(bind)
                                                      (S3)允许套接字进行连接(listen)
                                                      (S4)等待连接(accept)
                        čC1)获取IP地址和端口号
                        čC2)创建新的套接字(socket)
                        čC3)连接到服务器IP:port上去(connect)
                                                      čS5Ď通知应用程序有连接到来
                        čC4)连接成功                      čS6Ď开始读取请求(read)
                        čC5)发送HTTP请求(write)
                        čC6)等待HTTP响应(read)
                                                      čS7)处理HTTP请求报文
                                                      čS8)回送HTTP响应(write)
                        čC7Ď处理HTTP响应                  čS9)关闭连接(close)
                        čC8)关闭连接(close)


                 图 4-6 TCP 客户端和服务器是如何通过 TCP 套接字接口进行通信的                                         79

                 我们从 Web 服务器等待连接(参见图 4-6,S4)开始。客户端根据 URL 判定出 IP
                 地址和端口号,并建立一条到服务器的 TCP 连接(参见图 4-6,C3)。建立连接可
                 能要花费一些时间,时间长短取决于服务器距离的远近、服务器的负载情况,以及
                 因特网的拥挤程度。

                 一旦建立了连接,客户端就会发送 HTTP 请求(参见图 4-6,C5),服务器则会读取
                 请求(参见图 4-6,S6)。一旦服务器获取了整条请求报文,就会对请求进行处理,
                 执行所请求的动作(参见图 4-6,S7),并将数据写回客户端。客户端读取数据(参
                 见图 4-6,C6),并对响应数据进行处理(参见图 4-6,C7)。


                 4.2 对TCP性能的考虑


                 HTTP 紧挨着 TCP,位于其上层,所以 HTTP 事务的性能在很大程度上取决于底层
                 TCP 通道的性能。本节重点介绍了一些很重要的、对这些 TCP 连接的性能考虑。理
                 解了 TCP 的某些基本性能特点之后,就可以更好地理解 HTTP 的连接优化特性,这
                 样就能设计实现一些更高性能的 HTTP 应用程序了。


                                                                              连接管理   |   85
   107   108   109   110   111   112   113   114   115   116   117