Maison > Article > développement back-end > Comment pouvez-vous implémenter la diffusion d'événements serveur-client dans gRPC en utilisant une approche d'interrogation longue ?
Diffusion d'événements dans gRPC du serveur vers les clients
Lors de la création d'applications impliquant plusieurs clients se connectant à un serveur, il est souvent nécessaire de diffuser des événements vers tous les clients connectés. Dans gRPC, il existe plusieurs approches pour y parvenir.
Une option à considérer consiste à utiliser une approche d'interrogation longue. Cela implique que les clients interrogent périodiquement le serveur pour obtenir des mises à jour. Lorsqu'un événement se produit, le serveur informe tous les clients connectés, déclenchant le retour de leurs appels d'interrogation avec les nouvelles informations.
Pour implémenter une approche d'interrogation longue en Python, considérez le code suivant (une implémentation similaire est possible dans d'autres langages comme Go) :
<code class="python"># SERVER class UpdaterServer(UpdaterServicer): def __init__(self): self.condition = threading.Condition() self.updates = [] def post_update(self, update): with self.condition: self.updates.append(updates) self.condition.notify_all() def GetUpdates(self, req, context): with self.condition: while self.updates[req.last_received_update + 1:] == []: self.condition.wait() new_updates = self.updates[req.last_received_update + 1:] response = GetUpdatesResponse() for update in new_updates: response.updates.add().CopyFrom(update) response.update_index = req.last_received_update + len(new_updates) return response # SEPARATE THREAD IN CLIENT request = GetUpdatesRequest() request.last_received_update = -1 while True: stub = UpdaterStub(channel) try: response = stub.GetUpdates(request, timeout=60*10) handle_updates(response.updates) request.last_received_update = response.update_index except grpc.FutureTimeoutError: pass</code>
Dans cet exemple :
L'utilisation d'une approche d'interrogation longue garantit que tous les clients connectés reçoivent les événements diffusés et fournit un moyen fiable de communiquer les mises à jour à plusieurs parties.
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!