Heim > Backend-Entwicklung > Golang > Wie kann ich eine HTTP-POST-Anfrage in Golang vorzeitig beenden?

Wie kann ich eine HTTP-POST-Anfrage in Golang vorzeitig beenden?

Linda Hamilton
Freigeben: 2024-11-25 18:28:11
Original
486 Leute haben es durchsucht

How to Prematurely Terminate an HTTP POST Request in Golang?

Vorzeitige Beendigung einer HTTP-POST-Anfrage in Golang

Im Zusammenhang mit der Implementierung eines Long-Polling-Clients mithilfe von http.Client besteht die Notwendigkeit Dies führt häufig dazu, dass eine HTTP-POST-Anfrage vorzeitig geschlossen oder abgebrochen wird. Während der traditionelle Ansatz darin bestand, den Antworttext (bzw.Body.Close()) in einer separaten Goroutine zu schließen, führt dies zu Komplikationen, da der Client normalerweise beim Lesen der Antwort blockiert wird Bei der Anforderungsstornierung wird ein Kontext mit Fristen verwendet, der bei Bedarf storniert werden kann. Dies wird durch die Methode http.Request.WithContext erreicht.

So können Sie diese Strategie in Ihren Code integrieren:

Durch Festlegen des Kontexts für die Anfrage werden alle nachfolgenden Vorgänge aktiviert Diese Anfrage respektiert die Frist oder den Stornierungsstatus dieses Kontexts. Wenn der Kontext beispielsweise abgebrochen wird, bevor die Anfrage abgeschlossen ist, erhält der zugrunde liegende Transport einen Fehler und die Anfrage wird abgebrochen. Dies bietet einen klaren und präzisen Mechanismus zum vorzeitigen Beenden einer HTTP-POST-Anfrage von der Clientseite.
import (
    "context"
    "net/http"
)

// ...

// Create a context with a deadline or that can be canceled
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

req, err := http.NewRequest("POST", "http://example.com", bytes.NewBuffer(jsonPostBytes))
// ...

// Add the context to the request
req = req.WithContext(ctx)

// Perform the request
resp, err := client.Do(req)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich eine HTTP-POST-Anfrage in Golang vorzeitig beenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage