„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie können Sie die Server-zu-Client-Ereignisübertragung in gRPC mithilfe eines Long-Polling-Ansatzes implementieren?

Wie können Sie die Server-zu-Client-Ereignisübertragung in gRPC mithilfe eines Long-Polling-Ansatzes implementieren?

Veröffentlicht am 03.11.2024
Durchsuche:408

How can you implement server-to-client event broadcasting in gRPC using a long-polling approach?

Ü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 post_update()-Methode ermöglicht es den Clients, über Ereignisse benachrichtigt zu werden.
  • Der Server verwaltet eine Liste von Updates und benachrichtigt Clients wenn ein neues Update verfügbar wird.
  • Der Client fragt den Server regelmäßig ab und wartet auf Updates.
  • Wenn Ereignisse auftreten, löst der Server die Abfrageaufrufe des Clients aus, um mit den aktualisierten Informationen zurückzukehren.

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.

Neuestes Tutorial Mehr>

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