欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > Go网络编程-HTTP程序设计_2

Go网络编程-HTTP程序设计_2

2024/10/24 1:58:09 来源:https://blog.csdn.net/weixin_51568389/article/details/140535279  浏览:    关键词:Go网络编程-HTTP程序设计_2

HTTP程序设计

Go编写HTTP服务器,用 Go实现一个 http server非常容易,Go 语言标准库 net/http自带了一系列结构和方法来帮助开发者简化 HTTP 服务开发的相关流程。因此,我们不需要依赖任何第三方组件就能构建并启动一个高并发的 HTTP 服务器。

简单的HTTP服务器

函数:

 // http.ListenAndServefunc ListenAndServe(addr string, handler Handler) error

用于启动HTTP服务器,监听addr,并使用handler来处理请求。返回启动错误。其中:

  • addr,TCP address,形式为 IP:port,IP省略表示监听全部网络接口

  • handler,经常的被设置为nil,表示使用DefaultServeMux(默认服务复用器)来处理请求。

  • DefaultServeMux要使用以下两个函数来添加请求处理器

    • func Handle(pattern string, handler Handler)

    • func HandleFunc(pattern string, handler func(ResponseWriter, *Request))

示例代码:

httpServerSimple.go

 func HttpServerSimple() {// 一:设置不同路由(path)对应不同的处理器// /ping <-> ponghttp.HandleFunc("/ping", handlePing)​// 三:使用http.Handle设置处理器对象infoHandler := InfoHandler{info: "Welcome to Mashibing Go classroom.",}http.Handle("/info", infoHandler)​// 二:启动监听并提供服务addr := ":8088"log.Println("http server is listening on ", addr)err := http.ListenAndServe(addr, nil)log.Fatalln(err)}​// http.ResponseWriter 响应Writer// *http.Request 请求对象,包含了请求信息func handlePing(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "pong")}​// InfoHandler 实现Handler接口的类型type InfoHandler struct {info string}​func (h InfoHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, h.info)}

其中:Handler 接口的定义为:

 type Handler interface {ServeHTTP(ResponseWriter, *Request)}

我们的 InfoHandler实现了Handler接口,可以作为 http.Handle()的第二个参数来使用。

测试,通过main.main() 启动服务器:

httpServerSimple.go

 func main() {// 简单的HTTP服务器HttpServerSimple()}

运行

 go run httpServerSimple.go2023/03/02 21:00:29 http server is listening on  :8088

请求测试:

 curl http://localhost:8088/pingpong​curl http://localhost:8088/infoWelcome to Mashibing Go classroom.

复杂的HTTP服务器

定制性的HTTP服务器,通过 Server 类型进行设置。其定义如下:

 // net/httptype Server struct {// TCP AddressAddr stringHandler Handler // handler to invoke, http.DefaultServeMux if nil// LSConfig optionally provides a TLS configuration for use// by ServeTLS and ListenAndServeTLSTLSConfig *tls.Config// 读请求超时时间ReadTimeout time.Duration// 读请求头超时时间ReadHeaderTimeout time.Duration// 写响应超时时间WriteTimeout time.Duration// 空闲超时时间IdleTimeout time.Duration// Header最大长度MaxHeaderBytes int​// 其他字段略}

该类型的 func (srv *Server) ListenAndServe() error 函数用于监听和服务。

示例代码:

 // @file: HttpServerCustom.go​func HttpServerCustom() {myHandler := CustomHandler{message: "http.Server"}s := &http.Server{Addr:           ":8080",Handler:        myHandler,ReadTimeout:    10 * time.Second,WriteTimeout:   10 * time.Second,MaxHeaderBytes: 1 << 20,}log.Fatal(s.ListenAndServe())}​type CustomHandler struct {message string}​func (h CustomHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {time.Sleep(10 * time.Second)fmt.Fprintf(w, h.message)}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com