Zeitüberschreitungen bei RPC-Aufrufen verwalten
Remote Procedure Call (RPC) ist ein Mechanismus, der es Programmen ermöglicht, Prozeduren oder Funktionen auf Remote-Rechnern aufzurufen. Allerdings ist es für RPC-Systeme von entscheidender Bedeutung, über einen zuverlässigen Mechanismus zu verfügen, um Szenarien zu bewältigen, in denen der Remote-Aufruf unerwartet lange dauert oder fehlschlägt.
Timeout-Mechanismus in RPC
Tut Verfügt RPC über einen integrierten Timeout-Mechanismus? Die Antwort ist Nein. RPC verlässt sich bei der Behandlung von Zeitüberschreitungen auf zugrunde liegende Netzwerkprotokolle und Betriebssysteme. Die spezifische Implementierung variiert je nach verwendetem RPC-Framework und der Plattform, auf der es ausgeführt wird.
Implementieren von Zeitüberschreitungen mit Kanälen
In Ermangelung eines nativen RPC-Zeitüberschreitungsmechanismus Sie können mithilfe von Kanälen ein Timeout-Muster implementieren. Hier ist ein Beispiel mit dem Paket golang.org/x/net/rpc:
<code class="go">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 }</code>
In diesem Beispiel wird eine Goroutine erstellt, um den RPC-Aufruf auszuführen, während die Haupt-Goroutine auf einem Kanal (c) wartet. Wenn der RPC-Aufruf vor Ablauf des Timeouts zurückkehrt, wird das Ergebnis im Kanal gespeichert. Andernfalls fällt die SELECT-Anweisung auf den Fall „timeoutNanoseconds“ durch, was darauf hinweist, dass der Anruf abgelaufen ist.
Das obige ist der detaillierte Inhalt vonWie implementiert man Timeouts in RPC-Aufrufen ohne native Unterstützung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!