首頁  >  文章  >  後端開發  >  如何將事件從 gRPC 伺服器廣播到所有客戶端?

如何將事件從 gRPC 伺服器廣播到所有客戶端?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-02 06:00:30855瀏覽

How to Broadcast Events from a gRPC Server to All Clients?

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn