Трансляция событий в gRPC с сервера на клиенты
При создании приложений, включающих несколько клиентов, подключающихся к серверу, часто необходимо транслировать события все подключенные клиенты. В gRPC для достижения этой цели существует несколько подходов.
Один из вариантов, который следует рассмотреть, — использование подхода с длительным опросом. Это подразумевает, что клиенты периодически опрашивают сервер на наличие обновлений. Когда происходит событие, сервер уведомляет всех подключенных клиентов, запуская их опросные вызовы для возврата с новой информацией.
Чтобы реализовать подход длительного опроса в Python, рассмотрите следующий код (аналогичная реализация возможна в Python). другие языки, такие как 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
В этом примере:
Использование подхода длительного опроса гарантирует, что все подключенные клиенты получат широковещательные события, и обеспечивает надежный способ передачи обновлений нескольким сторонам.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3