Что такое мультиплексор HTTP-запроса?
Я изучал Голанг и заметил, что многие люди создают серверы, используя http.NewServeMux()
функционировать, и я не очень понимаю, что он делает.
Я прочитал это:
ServeMux - это мультиплексор HTTP-запросов. Он сопоставляет URL-адрес каждого входящего запроса со списком зарегистрированных шаблонов и вызывает обработчик для шаблона, который наиболее точно соответствует URL-адресу.
Чем это отличается от просто делать что-то вроде:
http.ListenAndServe(addr, nil)
http.Handle("/home", home)
http.Handle("/login", login)
Какова цель использования мультиплексирования?
1 ответ
От net/http
GoDoc и 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
Как вы видете http.Handle
звонки DefaultServeMux
внутренне.
func Handle(pattern string, handler Handler) { DefaultServeMux.Handle(pattern, handler) }
Цель http.NewServeMux()
это иметь свой собственный экземпляр http.Servermux
например, когда вам требуются две функции http.ListenAndServe, которые прослушивают разные порты с разными маршрутами.
Мультиплексор в Golang - это некоторые вещи, такие как аппаратный мультиплексор, который умножает некоторые входы на некоторые выходы
я дал тебе простой экзамен
type CustomMultiplexer struct {
}
данный мультиплексор должен реализовывать ServeHTTP
метод для регистрации int http на входах сервера
func (mux CustomMultiplexer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/" {
SimpleRequestHandler(w, r)
return
}
http.NotFound(w, r)
return
}
мой 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
}
}
знаю, что я могу использовать свой CustomMultiplxere
сделать мультиплексирование между входящими запросами
func main() {
customServer := CustomServer{}
err := http.ListenAndServe(":9001", &customServer)
if err != nil {
panic(err)
}
}
то http.HandleFunc
метод работает как мой данный простой мультиплексор.