Übertragung von Ereignissen in gRPC vom Server an Clients
Beim Erstellen von Anwendungen mit mehreren Clients, die eine Verbindung zu einem Server herstellen, ist es häufig erforderlich, Ereignisse an zu übertragen alle angeschlossenen Clients. In gRPC gibt es mehrere Ansätze, um dies zu erreichen.
Eine zu berücksichtigende Option ist die Verwendung eines Long-Polling-Ansatzes. Dazu gehört, dass Clients den Server regelmäßig nach Updates abfragen. Wenn ein Ereignis auftritt, benachrichtigt der Server alle verbundenen Clients und löst deren Abfrageaufrufe aus, um mit den neuen Informationen zurückzukehren.
Um einen Long-Polling-Ansatz in Python zu implementieren, betrachten Sie den folgenden Code (eine ähnliche Implementierung ist in möglich). andere Sprachen wie Go):
# 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
In diesem Beispiel:
Die Verwendung eines Long-Polling-Ansatzes stellt sicher, dass alle verbundenen Clients Broadcast-Ereignisse empfangen und bietet eine zuverlässige Möglichkeit, Aktualisierungen an mehrere Parteien zu übermitteln.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3