gRPC 中的廣播:伺服器到客戶端通訊
建立gRPC 連線時,通常需要將來自伺服器的事件或更新廣播到客戶端連接的客戶端。為了實現這一點,可以採用各種方法。
流可觀察物件
一種常見的方法是利用伺服器端流。每個連線的客戶端都與伺服器建立自己的流。但是,直接訂閱其他伺服器客戶端流是不可行的。
長輪詢
另一個選擇是實現長輪詢方法。這涉及讓客戶端定期輪詢伺服器,檢查新的更新。收到更新後,客戶端將收到回應並等待下一個輪詢間隔。
示例實現
以下是如何實現長輪詢的示例使用gRPC:
服務器端代碼
<code class="python">import threading class UpdaterServer: 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:] return GetUpdatesResponse( updates=new_updates, update_index=req.last_received_update + len(new_updates), )</code>
客戶端程式碼(單獨執行緒)
<code class="python">from threading import Event def handle_updates(updates): pass event = Event() request = GetUpdatesRequest(last_received_update=-1) while not event.is_set(): try: stub = UpdaterStub(channel) response = stub.GetUpdates(request, timeout=60*10) handle_updates(response.updates) request.last_received_update = response.update_index except grpc.FutureTimeoutError: pass</code>
透過實作此方法,連線的用戶端可以從伺服器擷取更新持續的時尚。
以上是如何在gRPC中實現伺服器到客戶端的廣播?的詳細內容。更多資訊請關注PHP中文網其他相關文章!