her*_*ain 8 http go multiplexing servemux
我一直在研究golang,我注意到很多人使用这个http.NewServeMux()函数创建服务器,我真的不明白它的作用.
我看了这个:
在go ServeMux是一个HTTP请求多路复用器.它将每个传入请求的URL与已注册模式的列表进行匹配,并调用与URL最匹配的模式的处理程序.
这与做以下事情有什么不同:
http.ListenAndServe(addr, nil)
http.Handle("/home", home)
http.Handle("/login", login)
Run Code Online (Sandbox Code Playgroud)
使用多路复用的目的是什么?
Golang 中的多路复用器类似于硬件中的多路复用器,它将一些输入乘以一些输出
我给了你一个简单的例子
type CustomMultiplexer struct {
}
Run Code Online (Sandbox Code Playgroud)
给定的多路复用器必须实现ServeHTTP要注册到服务器输入的 http 方法
func (mux CustomMultiplexer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/" {
SimpleRequestHandler(w, r)
return
}
http.NotFound(w, r)
return
}
Run Code Online (Sandbox Code Playgroud)
我的SimpleRequestHandler方法如下
func SimpleRequestHandler(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
mySimpleGetRequestHandler(w, r)
break
default:
http.Error(w, "method not allowed", http.StatusMethodNotAllowed)
break
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以使用 myCustomMultiplxere在传入请求之间进行多路复用
func main() {
customServer := CustomServer{}
err := http.ListenAndServe(":9001", &customServer)
if err != nil {
panic(err)
}
}
Run Code Online (Sandbox Code Playgroud)
该http.HandleFunc方法就像我给定的简单多路复用器一样工作。
来自net/httpGoDoc和Source。
ListenAndServe starts an HTTP server with a given address and handler. The handler is usually nil, which means to use DefaultServeMux. Handle and HandleFunc add handlers to DefaultServeMux
DefaultServeMux 只是预定义的 http.ServeMux
var DefaultServeMux = &defaultServeMux
var defaultServeMux ServeMux
Run Code Online (Sandbox Code Playgroud)
如您所见,内部http.Handle通话DefaultServeMux。
func Handle(pattern string, handler Handler) { DefaultServeMux.Handle(pattern, handler) }
的目的http.NewServeMux()是拥有自己的实例实例,http.Servermux例如当您需要两个http.ListenAndServe函数来侦听具有不同路由的不同端口时。
| 归档时间: |
|
| 查看次数: |
3007 次 |
| 最近记录: |