Transmitindo eventos em gRPC do servidor para clientes
Ao criar aplicativos envolvendo vários clientes conectados a um servidor, muitas vezes é necessário transmitir eventos para todos os clientes conectados. No gRPC, existem várias abordagens para conseguir isso.
Uma opção a considerar é usar uma abordagem de pesquisa longa. Isso envolve fazer com que os clientes pesquisem periodicamente o servidor em busca de atualizações. Quando ocorre um evento, o servidor notifica todos os clientes conectados, acionando suas chamadas de polling para retornar com as novas informações.
Para implementar uma abordagem de pesquisa longa em Python, considere o código a seguir (uma implementação semelhante é possível em outras linguagens como 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
Neste exemplo:
O uso de uma abordagem de pesquisa longa garante que todos os clientes conectados recebam eventos de transmissão e fornece uma maneira confiável de comunicar atualizações a várias partes.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3