加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

Go说话中处理赏罚 HTTP 处事器

发布时间:2018-12-12 08:06:34 所属栏目:业界 来源:韩忠康
导读:1 概述 包 net/http 提供了HTTP处事器端和客户端的实现。本文声名关于处事器端的部门。 快速开始: packagemain import( log net/http ) funcmain(){ //配置路由 http.HandleFunc(/,IndexAction) //开启监听 log.Fatal(http.ListenAndServe(:8888,nil)) }
副问题[/!--empirenews.page--]

 1 概述

包 net/http 提供了HTTP处事器端和客户端的实现。本文声名关于处事器端的部门。

快速开始:

  1. package main 
  2.  
  3. import ( 
  4.   "log" 
  5.   "net/http" 
  6.  
  7. func main() { 
  8.   // 配置 路由 
  9.   http.HandleFunc("/", IndexAction) 
  10.  
  11.   // 开启监听 
  12.   log.Fatal(http.ListenAndServe(":8888", nil)) 
  13.  
  14. func IndexAction(w http.ResponseWriter, r *http.Request) { 
  15.   w.Write([]byte(`<h1 align="center">来自小韩说课的问候</h1>`)) 

运行措施,在赏识器上哀求: localhost:8888,你会看到我们的功效:

Go说话构建HTTP处事器照旧很轻易的。深入声名。

Go说话中处理赏罚 HTTP 处事器

2 http.Server 范例

HTTP 处事器在 Go 说话中是由 http.Server 布局体工具实现的。参考 http.ListenAndServe()的实现:

  1. // 文件:src/net/http/server.go 
  2.  
  3. // ListenAndServe always returns a non-nil error. 
  4. func ListenAndServe(addr string, handler Handler) error { 
  5.   server := &Server{Addr: addr, Handler: handler} 
  6.   return server.ListenAndServe() 

可见进程是先实例化 Server 工具,再完成 ListenAndServe 。个中 Serve 工具就是暗示 HTTP 处事器的工具。其布局如下:

  1. // 文件:src/net/http/server.go 
  2.  
  3. type Server struct { 
  4.   Addr    string  // TCP 监听地点, 留空为:":http" 
  5.   Handler Handler // 挪用的 handler(路由处理赏罚器), 设为 nil 暗示 http.DefaultServeMux 
  6.  
  7.   TLSConfig *tls.Config // TLS 设置工具 
  8.   ReadTimeout time.Duration // 哀求超时时长 
  9.   ReadHeaderTimeout time.Duration // 哀求头超时时长 
  10.   WriteTimeout time.Duration // 相应超时时长 
  11.   IdleTimeout time.Duration // 哀求空闲时长(keep-alive下两个哀求间) 
  12.   MaxHeaderBytes int // 哀求头的最大长度 
  13.   TLSNextProto map[string]func(*Server, *tls.Conn, Handler) // NPN 型协议进级呈现时经受TLS毗连的处理赏罚器函数映射表 
  14.   ConnState func(net.Conn, ConnState) // 状态转换变乱处理赏罚器 
  15.   ErrorLog *log.Logger // 日记记录工具 
  16.   disableKeepAlives int32     // accessed atomically. 
  17.   inShutdown        int32     // accessed atomically (non-zero means we're in Shutdown) 
  18.   nextProtoOnce     sync.Once // guards setupHTTP2_* init 
  19.   nextProtoErr      error     // result of http2.ConfigureServer if used 
  20.   mu         sync.Mutex 
  21.   listeners  map[*net.Listener]struct{} 
  22.   activeConn map[*conn]struct{} 
  23.   doneChan   chan struct{} 
  24.   onShutdown []func() 

可见 Server 界说了处事器必要的信息。

实例化了 Server 工具后,挪用其 (srv *Server) ListenAndServe() error 要领。该要了解监听 srv.Addr 指定的 TCP 地点,并通过 (srv *Server) Serve(l net.Listener) error 要领吸取赏识器端毗连哀求。Serve 要了解吸取监听器 l 收到的每一个毗连,并为每一个毗连建设一个新的处事历程。

该 go 历程会读取哀求,然后挪用 srv.Handler 处理赏罚并相应。srv.Handler 凡是会是 nil,这意味着必要挪用 http.DefaultServeMux 来处理赏罚哀求,这个 DefaultServeMux 是默认的路由,我们行使 http.HandleFunc 就是在 http.DefaultServeMux 上注册要领。

3 http.DefaultServeMux 默认路由工具

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读