2016-11-08 4 views
4

Я изучаю golang, и я заметил, что многие люди создают серверы, используя функцию http.NewServeMux(), и я не совсем понимаю, что она делает.Что такое мультиплексор http-запроса?

Я прочитал это:

В ходу ServeMux это мультиплексор запрос HTTP. Он сопоставляет URL-адрес каждого входящего запроса со списком зарегистрированных шаблонов и вызывает обработчик для шаблона, который наиболее точно соответствует URL-адресу.

Как это отличается, чем просто делать что-то вроде:

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

Какова цель использования мультиплексирования?

+7

Когда вы это делаете, вы используете мультиплексор - а именно, 'http.DefaultServeMux'. – hobbs

+0

ListenAndServe будет использовать http.DefaultServeMux, если вы передадите ** nil ** в качестве второго параметра –

+0

. Мультиплексор запросов также называется маршрутизатором запроса. Он направляет входящие запросы обработчику с использованием некоторого набора правил. –

ответ

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 функций, слушающих разных порты с разными маршрутами.

Смежные вопросы