Heim >Backend-Entwicklung >Golang >Wie kann ich Timeouts für RPC-Aufrufe implementieren?

Wie kann ich Timeouts für RPC-Aufrufe implementieren?

DDD
DDDOriginal
2024-10-29 18:11:18352Durchsuche

 How Can I Implement Timeouts for RPC Calls?

Können RPC-Aufrufanfragen abgelaufen sein?

RPC oder Remote Procedure Call ist ein Mechanismus zum Aufrufen von Funktionen in einem anderen Prozess. Aufgrund von Netzwerklatenzen oder anderen Problemen können Anrufe jedoch manchmal hängen bleiben.

Wenn RPC nicht über einen integrierten Timeout-Mechanismus verfügt, können solche Situationen durch die Verwendung von Kanälen zur Implementierung eines Timeout-Musters gelöst werden:

import "time"

c := make(chan error, 1)
go func() { c <- client.Call("Service", args, &result) } ()
select {
  case err := <-c:
    // use err and result
  case <-time.After(timeoutNanoseconds):
    // call timed out
}

In diesem Beispiel:

  • c ist ein Kanal, der maximal einen Fehler enthalten kann.
  • Eine Goroutine führt den RPC-Aufruf aus und sendet den Fehler (bzw result) an den Kanal.
  • Die SELECT-Anweisung blockiert, bis entweder die Goroutine die Ausführung beendet und dem Kanal den Fehler sendet oder das TimeoutNanoseconds abläuft. Im ersteren Fall wird die Ausführung mit den Variablen „err“ und „result“ fortgesetzt, während im letzteren Fall die Operation eine Zeitüberschreitung erfährt.

Das obige ist der detaillierte Inhalt vonWie kann ich Timeouts für RPC-Aufrufe implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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