• GoWeb服务器搭建


    GoWeb服务器的创建

    1、Web工作原理

    2、GoWeb服务器的创建

    Go提供了一系列用于创建Web服务器的标准库,而且通过Go创建一个服务器的步骤非常简单,只要通过net/http包调用ListenAndServer函数并传入网络地址以及负责处理请求的处理器(handler)作为参数就可以,如果网络地址参数为空字符串,那么服务器默认使用80端口来进行网络连接,如果处理器的参数为nil,那么服务器将使用默认的多路复用器DefaultServeMux。当然我们也可以通过调用NewServeMux函数创建一个多路复用器,多路复用器接收到用户的额请求之后根据请求的url来判断使用哪个处理器来处理请求,找到后就会重定向到对应的处理器来处理请求。

    • 使用默认的多路复用器(DefaultServeMux)

      package main
      
      import (
      	"fmt"
      	"net/http"
      )
      
      // 创建处理器函数
      func handler(w http.ResponseWriter, r *http.Request){
      	fmt.Fprintln(w,"hello world", r.URL.Path)
      }
      
      func main() {
      	http.HandleFunc("/",handler)
      	// 创建路由
      	http.ListenAndServe(":8080",nil)
      }
      

      HandleFunc方法说明

      func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
      	DefaultServeMux.HandleFunc(pattern, handler)
      }
      

      HandleFunc注册了一个处理函数handle和对应的模式pattern(注册到DefaultServeMux)。

      Go语言拥有一种HandleFunc函数类型,它可以将一个带有正确签名的函数f转换成一个带有方法f的Handler。

    • 使用自己创建的多路复用器

      在创建服务器时,我们可以通过NewServeMux方法创建一个多路复用器

      package main
      
      import (
      	"fmt"
      	"net/http"
      )
      
      // 创建处理器函数
      func handler(w http.ResponseWriter, r *http.Request){
      	fmt.Fprintln(w,"hello world", r.URL.Path)
      }
      
      func main() {
      	// 创建多路复用器
      	mux := http.NewServeMux()
      	mux.HandleFunc("/",handler)
      	// 创建路由
      	http.ListenAndServe(":8080",mux)
      }
      
    • 使用处理器处理请求

      某个结构体实现Handler结构的ServeHTTP方法,那么就实现了一个处理器。

      package main
      
      import (
      	"fmt"
      	"net/http"
      )
      
      type myHandler struct{}
      
      
      func (m *myHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){
      	fmt.Fprintln(w,"hello world")
      }
      
      func main() {
      	m := myHandler{}
      	http.Handle("/",&m)
      	http.ListenAndServe(":8080",nil)
      }
      

      我们还可以通过Server结构体对服务器进行更详细的配置。

      type Server struct {
          Addr           string        // 监听的TCP地址,如果为空字符串会使用":http"
          Handler        Handler       // 调用的处理器,如为nil会调用http.DefaultServeMux
          ReadTimeout    time.Duration // 请求的读取操作在超时前的最大持续时间
          WriteTimeout   time.Duration // 回复的写入操作在超时前的最大持续时间
          MaxHeaderBytes int           // 请求的头域最大长度,如为0则用DefaultMaxHeaderBytes
          TLSConfig      *tls.Config   // 可选的TLS配置,用于ListenAndServeTLS方法
          // TLSNextProto(可选地)指定一个函数来在一个NPN型协议升级出现时接管TLS连接的所有权。
          // 映射的键为商谈的协议名;映射的值为函数,该函数的Handler参数应处理HTTP请求,
          // 并且初始化Handler.ServeHTTP的*Request参数的TLS和RemoteAddr字段(如果未设置)。
          // 连接在函数返回时会自动关闭。
          TLSNextProto map[string]func(*Server, *tls.Conn, Handler)
          // ConnState字段指定一个可选的回调函数,该函数会在一个与客户端的连接改变状态时被调用。
          // 参见ConnState类型和相关常数获取细节。
          ConnState func(net.Conn, ConnState)
          // ErrorLog指定一个可选的日志记录器,用于记录接收连接时的错误和处理器不正常的行为。
          // 如果本字段为nil,日志会通过log包的标准日志记录器写入os.Stderr。
          ErrorLog *log.Logger
          // 内含隐藏或非导出字段
      }
      

      Server类型定义了HTTP服务端的参数,Server的零值是合法的配置。

      package main
      
      import (
      	"fmt"
      	"net/http"
      	"time"
      )
      
      type myHandler struct{}
      
      
      func (m *myHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){
      	fmt.Fprintln(w,"hello world")
      }
      
      func main() {
      	m := myHandler{}
      	server := http.Server{
      		Addr: ":8080",
      		Handler: &m,
      		ReadHeaderTimeout: 2*time.Second,
      	}
      
      	server.ListenAndServe()
      }
      
  • 相关阅读:
    让网页活起来!韵律线带你提升带你飞!
    打造晶格化背景
    简单banner制作
    设计模式-适配器模式
    类、方法的单一职责
    .NET趋势
    C# Delegate Event
    VB.NET项目技术总结
    版本控制工具Git的使用
    delete语句要注意的BUG.
  • 原文地址:https://www.cnblogs.com/huiyichanmian/p/13798940.html
Copyright © 2020-2023  润新知