RPC 呼び出しのタイムアウトの管理
リモート プロシージャ コール (RPC) は、プログラムがリモート マシン上でプロシージャまたは関数を呼び出すことを可能にするメカニズムです。ただし、RPC システムには、リモート呼び出しに予想外に時間がかかったり、失敗したりするシナリオを処理する信頼性の高いメカニズムを備えていることが重要です。
RPC のタイムアウト メカニズム
RPC にはタイムアウト メカニズムが組み込まれていますか?答えはいいえです。 RPC は、基礎となるネットワーク プロトコルとオペレーティング システムに依存してタイムアウトを処理します。具体的な実装は、使用されている RPC フレームワークとそれが実行されるプラットフォームによって異なります。
チャネルによるタイムアウトの実装
ネイティブ RPC タイムアウト メカニズムがない場合、チャネルを使用してタイムアウト パターンを実装できます。 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>
この例では、メインの goroutine がチャネル (c) で待機している間に、RPC 呼び出しを実行する goroutine が作成されます。タイムアウトが経過する前に RPC 呼び出しが返された場合、結果はチャネルに保存されます。それ以外の場合、select ステートメントは timeoutNanoseconds ケースに移行し、呼び出しがタイムアウトしたことを示します。
以上がネイティブ サポートなしで RPC 呼び出しにタイムアウトを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。