2016-11-08 22 views
4

我一直在研究golang,並且我注意到很多人通過使用http.NewServeMux()函數來創建服務器,我不太明白它的作用。什麼是http請求多路複用器?

我這樣說的:

在旅途中ServeMux是HTTP請求多路複用器。它將每個傳入請求的URL與 的URL匹配到已註冊模式的列表,並調用與該URL最匹配的模式的處理程序 。

這是怎麼回事不僅僅是做這樣的事情不同:

http.ListenAndServe(addr, nil) 
http.Handle("/home", home) 
http.Handle("/login", login) 

什麼是使用複用的目的是什麼?

+7

當你這樣做時,你正在使用多路複用器 - 也就是'http.DefaultServeMux'。 – hobbs

+0

如果您通過** nil **作爲第二個參數 –

+0

,ListenAndServe將使用http.DefaultServeMux請求多路複用器也稱爲請求路由器。它使用一些規則將傳入請求路由到處理程序。 –

回答

3

net/http GoDoc和來源。

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 

正如你可以看到http.Handle電話DefaultServeMux內部。

func Handle(pattern string, handler Handler) { DefaultServeMux.Handle(pattern, handler) }

http.NewServeMux()的目的是爲了有自己的http.Servermux實例情況下,您需要兩個http.ListenAndServe功能收聽不同的路線不同端口等。