Go-Sprache ist eine effiziente Programmiersprache. Ihre Vorteile wie Einfachheit, Effizienz, Sicherheit und Zuverlässigkeit sind weithin anerkannt und angewendet. Der Grund für seine weit verbreitete Verwendung ist unter anderem auch untrennbar mit der leistungsstarken Netzwerkbibliothek verbunden, die es unterstützt. Dieser Artikel konzentriert sich auf die Verarbeitung von HTTP-Anfragen in der Go-Sprache.
1. Grundlagen der HTTP-Anfrageverarbeitung
Die HTTP-Anfrageverarbeitung ist ein wesentlicher Bestandteil der Web-Back-End-Entwicklung, und die Verarbeitung von HTTP-Anfragen in der Go-Sprache kann als äußerst einfach und unkompliziert bezeichnet werden Einfach zu verwenden, werfen wir einen Blick auf die zugehörigen APIs.
- http.ListenAndServe()
kann als HTTP-Server verstanden werden, der den lokalen Port direkt abhören und auf das Eintreffen von HTTP-Anfragen warten kann.
func ListenAndServe(addr string, handler Handler) error
Unter diesen wird addr zur Angabe der Netzwerkadresse verwendet. Die allgemeine Form lautet „IP-Adresse oder“. Domänenname: Portnummer ", aber wenn die Portnummer 0 ist, weist das Betriebssystem automatisch einen nicht verwendeten Port zu; Handler ist eine Funktion, die zum Verarbeiten von http-Anfragen verwendet wird.
- http.HandleFunc()
ist eine API, die Rückruffunktionen für HTTP-Anfragen registriert:
func HandleFunc (Musterzeichenfolge, Handlerfunktion (ResponseWriter, *Request))
Unter diesen ist Muster der Pfad der Registrierungsanforderung und Handler die Rückruffunktion der HTTP-Anfrage Die Funktion lautet wie folgt:
type HandlerFunc func(ResponseWriter, *Request)
Sie können sehen, dass die formalen Parameter der Rückruffunktion für HTTP-Anfragen http.ResponseWriter und *http sind .Anfrage.
- http.ResponseWriter
ist der Typ der an den Client zurückgegebenen HTTP-Antwort:
1) ResponseWriter . Header(), wird zum Festlegen des HTTP-Antwortheaders verwendet;
2) ResponseWriter.Write(), wird zum Schreiben des HTTP-Antworttexts an den Client verwendet.
- http.Request
stellt die Struktur der HTTP-Anfrage dar, die die Details aller HTTP-Anfragen enthält, z. B. den Header, den Text, die Methode usw. des http Anfrage.
- Beispiel für die Verarbeitung einer HTTP-Anfrage
Das folgende Codefragment zeigt, wie eine HTTP-GET-Anfrage in der Go-Sprache verarbeitet wird, die http.HandleFunc() aufruft, um eine Rückruffunktion zu registrieren: # 🎜 🎜#
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
})
http.ListenAndServe(":8080", nil)
Nach dem Login kopieren
}
Hinweis: Wenn die Schnittstelle der HTTP-Anfrage als „/“ definiert ist, http.HandleFunc() muss registriert werden. Der Pfad sollte als „/“ geschrieben werden.
2. HTTP-Anfrageverarbeitungsmethode
http.Get()- wird verwendet, um die Antwort der Remote-HTTP-Anfrage zu erhalten Gibt einen Statuscode zurück. Wenn dieser nicht 2xx ist, wird eine Fehlermeldung zurückgegeben. Der von dieser Methode zurückgegebene Datentyp ist *http.Response, der zu einer Struktur gehört und viele Attribute enthält Das Body-Attribut stellt den Text der HTTP-Anfrageantwort dar. Der Inhalt von Body kann mit der Funktion ioutil.ReadAll() gelesen werden.
func (c
Client) Get(url string) (resp Response, err error)
http .PostForm()- wird zum Senden von HTTP-Formulardaten verwendet, z. B. zum Senden eines Anmeldeformulars. Der am häufigsten verwendete ContentType ist der Typ application/x-www-form-urlencoded. Der Rückgabetyp dieser Methode ist *http .Antwort. Es ist zu beachten, dass diese Methode nur POST-Anfragen unterstützt und die Methode url.Values.Encode() aufgerufen werden sollte, um die Formulardaten vor dem Absenden des Formulars zu kodieren.
func PostForm(url string, data url.Values) (resp *Response, err error)
http.Post()#🎜 🎜#Diese Methode ähnelt http.PostForm(), unterstützt jedoch mehr Arten von Netzwerkanforderungen, d. h. der ContentType-Typ ist nicht auf application/x-www-form-urlencoded beschränkt.
func (c
Client) Post(url string, bodyType string, body io.Reader) (resp
Response, err error)# 🎜🎜# Unter diesen ist bodyType der angeforderte Inhaltstyp und body der angeforderte Inhalt.
http.Do()
Unterstützt mehr Netzwerkanfragetypen und wir können die Anfrageheader anpassen, was die flexibelste Anfragemethode ist. Es ist zu beachten, dass diese Methode *http.Response zurückgibt und Sie sie schließen müssen, nachdem Sie die Antwort verwendet haben.
-
func (c Client) Do(req
Request) (resp *Response, err error)
3. HTTP-Anfrage Umgang mit LeistungsoptimierungWenn wir mehrere Goroutinen verwenden, um HTTP-Anfragen gleichzeitig auszuführen, müssen wir den Leistungsengpass verstehen und in der Lage sein, eine geeignete Optimierungslösung auszuwählen. Im Folgenden werden mehrere Lösungen zur Optimierung der HTTP-Anforderungsleistung vorgestellt.
- Keep-Alive
Keep-Alive der http-Verbindung dient dazu, die Ressourcenbelegung der http-Verbindung so weit wie möglich zu optimieren und den Leistungsverlust zu vermeiden, der durch den häufigen Aufbau und die Trennung von TCP-Verbindungen verursacht wird, indem die TCP-Verbindung mit dem Server aufrechterhalten wird, ohne sie zu schließen , Sie können den durch das Einrichten und Schließen von TCP verursachten Leistungsverlust reduzieren und die Effizienz von http-Anfragen verbessern.
- Leerlaufverbindungspool
Wenn wir unterschiedliche Pfade für denselben Host anfordern müssen, können wir einen Leerlaufverbindungspool verwenden, um die Verbindung zu verwalten. Indem wir einen Slice zum Speichern der Verbindung definieren, versuchen wir vor der Wiederverwendung, die Verbindung aus dem Slice abzurufen und prüfen Sie, ob die Wiederverwendung in Ordnung ist. Wenn die Anzahl der Verbindungen die maximale Anzahl der Verbindungen im Pool überschreitet, kann die Anzahl der Verbindungen konsistent sein mit der maximalen Anzahl von Verbindungen des Betriebssystems.
- Lange Verbindung
Wenn eine große Anzahl von Anforderungen initiiert werden muss, ist die Optimierung langer Verbindungen sehr wichtig. Wenn der Server HTTPs Keep-Alive unterstützt, kann der Client eine lange Verbindung herstellen, indem er den Connection:keep-alive-Header angibt .Status, mehrere Anfragen und Antworten können verarbeitet werden und eine TCP-Verbindung kann wiederverwendet werden, wodurch der Aufbau und die Schließung von TCP effektiv reduziert werden.
IV. Zusammenfassung: In diesem Artikel wird hauptsächlich die HTTP-Anforderungsverarbeitung in der Go-Sprache vorgestellt. In der tatsächlichen Entwicklung können wir je nach Geschäftsanforderungen verschiedene Netzwerkanforderungsmethoden und Leistungsoptimierungslösungen auswählen. Gleichzeitig ist die Netzwerkanforderungsbibliothek in der Go-Sprache äußerst einfach und benutzerfreundlich. Sie unterstützt auch eine Vielzahl von HTTP-Anforderungsmethoden und Optimierungslösungen, was unserer Back-End-Entwicklung großen Komfort bietet.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verarbeitung von HTTP-Anfragen in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!