Maison > développement back-end > Golang > le corps du texte

Comment puis-je implémenter des délais d'attente pour les appels RPC ?

DDD
Libérer: 2024-10-29 18:11:18
original
351 Les gens l'ont consulté

 How Can I Implement Timeouts for RPC Calls?

Les demandes d'appel RPC peuvent-elles être expirées ?

RPC, ou Remote Procedure Call, est un mécanisme permettant d'appeler des fonctions dans un processus différent, mais en raison de latences du réseau ou d'autres problèmes, les appels peuvent parfois rester bloqués.

Si RPC ne dispose pas d'un mécanisme de délai d'attente intégré, de telles situations peuvent être gérées en utilisant des canaux pour implémenter un modèle de délai d'attente :

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
}
Copier après la connexion

Dans cet exemple :

  • c est un canal qui peut contenir au maximum une erreur.
  • Une goroutine exécute l'appel RPC et envoie l'erreur (ou result) au canal.
  • L'instruction select se bloque jusqu'à ce que la goroutine termine son exécution et envoie l'erreur au canal, ou que le timeoutNanoseconds s'écoule. Si le premier cas se produit, l'exécution continue avec les variables err et result, tandis que dans le second cas, l'opération expire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal