服务计算 || go Net/HTTP源码解读

目录

HTTP

HTTP服务器功能

Net/HTTP库对应这三个功能相应的实现

监听端口

接收客户端请求

处理客户端请求


HTTP

HTTP相关的网络应用主要包括两个部分:

  • 客户端(client)
  1. 客户端通过 TCP/IP 协议建立与服务器的 TCP 连接
  2. 客户端向服务器发送 HTTP 协议请求报文,请求获得服务器资源
  • 服务端(server)
  1. 服务端解析接收到的 HTTP 协议请求报文,并根据报文内容处理相关的数据
  2. 服务端把请求的资源通过 HTTP 协议响应报文发送回给客户端

Golang的HTTP处理流程如下:

HTTP服务器功能

一个HTTP服务器必须至少实现以下功能:

  • 监听主机的某个端口
  • 当在监听的端口上有客户端的请求到来时,接收该客户端的请求
  • 处理客户端的请求

Net/HTTP库对应这三个功能相应的实现

监听端口

监听主机上的某个窗口应该使用函数 http.ListenAndServe ,源码如下:

// ListenAndServe listens on the TCP network address addr
// and then calls Serve with handler to handle requests
// on incoming connections.
// Accepted connections are configured to enable TCP keep-alives.
// Handler is typically nil, in which case the DefaultServeMux is
// used.
//
// ListenAndServe always returns a non-nil error.
func ListenAndServe(addr string, handler Handler) error {
  server := &Server{Addr: addr, Handler: handler}
  return server.ListenAndServe()
}

调用该函数的时候,指定要监听的端口 addr 和相应的处理函数 handler (当 http 服务器的路由为 DefaultServeMux 时,这个 handler 的值为 nil):

err := http.ListenAndServe(":23333", nil)
if 

你可能感兴趣的:(服务计算 || go Net/HTTP源码解读)