在gRPC 中從伺服器向客戶端廣播事件
在gRPC 中,當使用者作為客戶端連接到伺服器時,廣播至關重要將此事件傳送給所有連線的用戶端。為了實現這一點,您可以利用伺服器端觀察者或長輪詢方法。
伺服器端觀察者
伺服器可以維護已連線的清單客戶。當新客戶端連線時,其對應的流將會加入到清單中。要廣播事件,伺服器只需迭代列表並將事件發送到每個串流。然而,這種方法需要伺服器追蹤連接的客戶端並管理串流訂閱,這可能會變得複雜。
長輪詢方法
長輪詢提供了另一種解決方案。每個客戶端都與伺服器建立一個長期存在的流。客戶端向伺服器發送請求並等待回應。伺服器保留請求,直到發生事件。當事件發生時,伺服器會回應客戶端,觸發其長輪詢呼叫返回。
以下是使用長輪詢的範例:
<code class="python"># Server-side code class UpdaterServer: def post_update(self, update): with self.condition: self.updates.append(update) self.condition.notify_all() def GetUpdates(self, req, context): 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 # Client-side code request = GetUpdatesRequest() request.last_received_update = -1 while True: try: response = stub.GetUpdates(request, timeout=60*10) handle_updates(response.updates) request.last_received_update = response.update_index except grpc.FutureTimeoutError: pass</code>
當新事件發生時,伺服器呼叫 post_update(),通知所有等待的客戶端。然後,客戶端的長輪詢呼叫會傳回更新後的資訊。
以上是如何將事件從 gRPC 伺服器廣播到所有客戶端?的詳細內容。更多資訊請關注PHP中文網其他相關文章!