Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyiarkan Acara daripada Pelayan gRPC kepada Semua Pelanggan?

Bagaimana untuk Menyiarkan Acara daripada Pelayan gRPC kepada Semua Pelanggan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-02 06:00:30775semak imbas

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

Menyiarkan Acara dalam gRPC daripada Pelayan kepada Pelanggan

Dalam gRPC, apabila pengguna menyambung ke pelayan sebagai pelanggan, adalah penting untuk menyiarkan acara ini kepada semua pelanggan yang berkaitan. Untuk mencapai matlamat ini, anda boleh memanfaatkan sama ada pemerhati sebelah pelayan atau pendekatan tinjauan panjang.

Pemerhati Sebelah Pelayan

Pelayan boleh mengekalkan senarai yang disambungkan pelanggan. Apabila pelanggan baharu menyambung, strim yang sepadan ditambah pada senarai. Untuk menyiarkan acara, pelayan hanya melayari senarai dan menghantar acara ke setiap aliran. Walau bagaimanapun, pendekatan ini memerlukan pelayan menjejaki pelanggan yang disambungkan dan mengurus langganan strim, yang boleh menjadi rumit.

Pendekatan Pengundian Panjang

Tinjauan panjang menawarkan penyelesaian alternatif . Setiap pelanggan mewujudkan aliran jangka panjang dengan pelayan. Pelanggan menghantar permintaan kepada pelayan dan menunggu jawapan. Pelayan menahan permintaan sehingga peristiwa berlaku. Apabila acara berlaku, pelayan bertindak balas kepada pelanggan, mencetuskan panggilan tinjauan panjang mereka untuk kembali.

Berikut ialah contoh menggunakan tinjauan panjang:

<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>

Apabila acara baharu berlaku, pelayan memanggil post_update(), yang memberitahu semua pelanggan menunggu. Panggilan tinjauan panjang pelanggan kemudian kembali dengan maklumat yang dikemas kini.

Atas ialah kandungan terperinci Bagaimana untuk Menyiarkan Acara daripada Pelayan gRPC kepada Semua Pelanggan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn