Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Menyiarkan Acara daripada Pelayan gRPC kepada Semua Pelanggan?
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!