在gRPC 中將事件從伺服器廣播到客戶端
創建涉及連接到伺服器的多個客戶端的應用程式時,通常需要將事件廣播到所有連接的客戶端。在 gRPC 中,有多種方法可以實現此目的。
需要考慮的一個選項是使用長輪詢方法。這涉及讓客戶端定期輪詢伺服器以獲取更新。當事件發生時,伺服器通知所有連接的客戶端,觸發它們的輪詢呼叫以傳回新資訊。
要在 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