ホームページ >バックエンド開発 >Golang >RPC 呼び出しのタイムアウトを実装するにはどうすればよいですか?

RPC 呼び出しのタイムアウトを実装するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-29 18:11:18388ブラウズ

 How Can I Implement Timeouts for RPC Calls?

RPC 呼び出しリクエストはタイムアウトになりますか?

RPC (リモート プロシージャ コール) は、別のプロセスの関数を呼び出すメカニズムです。ただし、ネットワーク遅延やその他の問題により、呼び出しが停止することがあります。

RPC にタイムアウト メカニズムが組み込まれていない場合、そのような状況はチャネルを使用してタイムアウト パターンを実装することで処理できます。

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
}

この例では:

  • c は最大 1 つのエラーを保持できるチャネルです。
  • ゴルーチンは RPC 呼び出しを実行し、エラーを送信します (または
  • select ステートメントは、ゴルーチンが実行を終了してチャネルにエラーを送信するか、timeoutNano秒が経過するまでブロックされます。前者の場合は、err 変数と result 変数を使用して実行が続行されますが、後者の場合は操作がタイムアウトになります。

以上がRPC 呼び出しのタイムアウトを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。