La creación de servidor web Goweb

breve introducción

Go proporciona un conjunto de librerías estándar para la creación de servidor web y crear un ir servidor a través de los pasos tan simples como llamar a la función ListenAndServe por la red http paquetes entrantes y / dirección de red y es responsable de manejar el procesador de peticiones (manejador) como parámetros en él. Si el parámetro dirección de red es una cadena vacía, entonces el servidor utiliza el valor por defecto 80 si el parámetro es el procesador; red de puertos de conexión nula , el servidor utiliza el multiplexor predeterminado DefaultServeMux, por supuesto, también es posible crear un multi-función llamando NewServeMux multiplexores. Después de multiplexor recibe la solicitud de URL de acuerdo con la petición del usuario para determinar qué procesador se utiliza para procesar la petición, después de hallazgo redirigido al procesador correspondiente para procesar la solicitud

El multiplexor predeterminado (DefaultServeMux)

  1. procesamiento de función usando una solicitudes de procesador
package main

import (
	"fmt"
	"net/http"
)
//创建处理器函数
func handler(w http.ResponseWriter, r *http.Request)  {
	fmt.Fprintln(w, "正在通过处理器函数处理你的请求")
}
func main() {
	http.HandleFunc("/", handler)
	//创建路由
	http.ListenAndServe(":8080", nil)
}
  • func HandleFunc
func HandleFunc(pattern string, handler func(ResponseWriter, *Request))

registro HandleFunc y un controlador de función del procesador correspondiente al modo de patrón (DefaultServeMux registrada). documento ServeMux explica el mecanismo de coincidencia de patrones

La función principal del procesador

  • ir a tomar una clase de lenguaje HandlerFunc tipo de función, que puede ser una función con la firma correcta f convertido Handler con un método de f

escriba HandlerFunc

type HandlerFunc func(ResponseWriter, *Request)

Tipo HandlerFunc es un adaptador, echemos por funciones normales como HTTP manejador puede utilizar. Si f es una función de tener la firma apropiada, HandlerFunc (f) implementa la interfaz Handler llamando f

  1. El uso de un procesador para procesar la solicitud
package main

import (
	"fmt"
	"net/http"
)

type MyHandler struct {

}

func (m *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintln(w, "通过自己创建的处理器处理请求!")
}
func main() {
	myHandler := MyHandler{}
	http.Handle("/myHandler", &myHandler)
	http.ListenAndServe(":8080", nil)
}

el acceso del navegador
http://127.0.0.1:8080/myHandler

  • Mango func
func Handle(pattern string, handler Handler)

Manejar Registro HTTP controlador y un correspondiente patrón de modo de procesador (DefaultServeMux registrada). Si el patrón ya ha registrado un procesador, Mango en pánico. documento ServeMux explica el mecanismo de coincidencia de patrones

  • tipo de controlador
type Handler interface {
    ServeHTTP(ResponseWriter, *Request)
}

implementos de controlador de los objetos de la interfaz se pueden registrar en el servidor HTTP para proporcionar servicios a una ruta específica y su sub-árbol

ServeHTTP que responda de los campos de cabecera y las interfaces de datos de escritura ResponseWriter luego vuelve. Con motivo de la solicitud de devolución ha terminado, el servidor HTTP se puede transferir a la siguiente solicitud en la conexión

Mientras una estructura para lograr una interfaz de ServeHTTP método Handler, entonces es un procesador

  1. Una configuración más detallada de servidor a través de una arquitectura de servidores
  • tipo de servidor
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
    // 内含隐藏或非导出字段
}

Tipo de servidor define los parámetros de funcionamiento de servidor HTTP. valor cero para la configuración del servidor es legítimo

package main

import (
	"fmt"
	"net/http"
	"time"
)

type MyHandler struct {

}

func (m *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintln(w, "通过详细配置服务器的信息来处理请求!")
}
func main() {
	myHandler := MyHandler{}
	//创建Server结构,并详细配置
	server := http.Server{
		Addr: ":8080",
		Handler: &myHandler,
		ReadTimeout: 2 * time.Second,
	}
	server.ListenAndServe()

}

Crear su propio uso de un multiplexor

  1. Al crear un servidor, un multiplexor también puede crear un método por el NewServeMux

func NewServeMux

func NewServeMux() *ServeMux

NewServeMux Crea y devuelve una nueva * ServeMux

package main

import (
	"fmt"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request)  {
	fmt.Fprintln(w, "通过自己创建的多路复用器来处理请求")
}
func main() {
	mux := http.NewServeMux()
	mux.HandleFunc("/myMux", handler)
	http.ListenAndServe(":8080", mux)
}

estructura ServeMux

escriba ServeMux

type ServeMux struct {
    // 内含隐藏或非导出字段
}

ServeMux HTTP tipo de solicitud es un multiplexor. Será una lista de patrones de URL con domicilio cada solicitud recibida coincide, y la llamada y el URL que mejor coincide con el patrón del procesador.

Modo es fijo, el inicio del camino de la raíz, como "/favicon.ico", o la raíz de un subárbol, tales como "/ images /" (barra diagonal final nota). ya modo de toma prioridad sobre el modo de resumen, por lo que si el patrón "/ images /" y "/ images / miniaturas /" se registró el procesador, el procesador será utilizado por la ruta a "/ images / miniaturas /" inicio solicitud, antes de recibir una petición en el procesador de un "/ images /" subárbol a la trayectoria restante.

Tenga en cuenta que debido a que la barra de modo que termina en nombre de un hijo de la raíz del árbol, el patrón "/" coincidirá con todos los otros caminos no están registrados coincidencia de patrones, no sólo la ruta "/".

Modo puede ser (opcionalmente) para iniciar el nombre de host, el camino para que coincida sólo en el host. Especificar la precedencia patrón host a través de la pauta general, registrando así un modo de dos "/ CodeSearch" y el procesador "codesearch.google.com/" no va a tomar sobre el objetivo de "http://www.google.com/" peticiones.

Inofensiva URL ServeMux ruta también solicitud de confirmación, se incluirán cualquier camino. "" O "..." en la solicitud se redirige a la URL no es equivalente a estos dos elementos. (Véase la función path.Clean)

Estructurar método relacionado ServeMux

  • func (* ServeMux) Mango
func (mux *ServeMux) Handle(pattern string, handler Handler)

Manejar Registro HTTP controlador y un correspondiente patrón de modo de procesador. Si el patrón ya ha registrado un procesador, Mango en pánico.

  • func (* ServeMux) HandleFunc
func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Request))

HandleFunc registrar un controlador de función y un correspondiente patrón de modo de procesador.

  • func (* ServeMux) Handler
func (mux *ServeMux) Handler(r *Request) (h Handler, pattern string)

El controlador de r.Method, r.Host r.URL.Path y otros datos, devuelto por el controlador HTTP procesa la solicitud. Es siempre devuelve un procesador no nula. Si la ruta no es una forma canónica que volverá a las especificaciones de los procesadores incorporados para redirigir la trayectoria equivalente.

Handler también devuelve la solicitud coincide con el patrón registrado; en el caso de la incorporada en el procesador de redirección, el patrón coincidirá después de redirección. Si no hay un patrón registrado puede ser aplicado a la solicitud, el método devuelve un built-in "404 página no encontrada" procesador de modo y una cadena vacía.

  • func (* ServeMux) ServeHTTP
func (mux *ServeMux) ServeHTTP(w ResponseWriter, r *Request)

ServeHTTP la solicitud enviada al procesador con el patrón de URL solicitada correspondiente a la mejor correspondencia

Publicados 116 artículos originales · ganado elogios 27 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/wuxingge/article/details/105219923
Recomendado
Clasificación