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

Comment implémenter des délais d'attente dans les appels RPC sans support natif ?

Barbara Streisand
Libérer: 2024-10-29 15:25:02
original
764 Les gens l'ont consulté

How to Implement Timeouts in RPC Calls Without Native Support?

Gestion des délais d'attente dans les appels RPC

L'appel de procédure à distance (RPC) est un mécanisme qui permet aux programmes d'invoquer des procédures ou des fonctions sur des machines distantes. Cependant, il est crucial que les systèmes RPC disposent d'un mécanisme fiable pour gérer les scénarios dans lesquels l'appel à distance prend un temps inattendu ou échoue.

Mécanisme de délai d'attente dans RPC

Est-ce que RPC a-t-il un mécanisme de délai d'attente intégré ? La réponse est non. RPC s'appuie sur des protocoles réseau et des systèmes d'exploitation sous-jacents pour gérer les délais d'attente. L'implémentation spécifique varie en fonction du framework RPC utilisé et de la plate-forme sur laquelle il s'exécute.

Implémentation de délais d'attente avec des canaux

En l'absence d'un mécanisme de délai d'attente RPC natif, vous pouvez implémenter un modèle de délai d'attente à l'aide de canaux. Voici un exemple utilisant le package 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>
Copier après la connexion

Dans cet exemple, une goroutine est créée pour effectuer l'appel RPC pendant que la goroutine principale attend sur un canal (c). Si l'appel RPC revient avant l'expiration du délai d'attente, le résultat est stocké dans le canal. Sinon, l'instruction select passe au cas timeoutNanoseconds, indiquant que l'appel a expiré.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal