サーバーからクライアントへの gRPC でのイベントのブロードキャスト
サーバーに接続する複数のクライアントが関与するアプリケーションを作成する場合、多くの場合、イベントをサーバーにブロードキャストする必要があります。接続されているすべてのクライアント。 gRPC では、これを実現するためのアプローチがいくつかあります。
考慮すべきオプションの 1 つは、ロングポーリング アプローチを使用することです。これには、クライアントに更新のためにサーバーを定期的にポーリングさせることが含まれます。イベントが発生すると、サーバーは接続されているすべてのクライアントに通知し、ポーリング呼び出しをトリガーして新しい情報を返します。
Python でロングポーリングアプローチを実装するには、次のコードを検討してください (同様の実装は、 Go などの他の言語):
<code class="python"># SERVER class UpdaterServer(UpdaterServicer): 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:] response = GetUpdatesResponse() for update in new_updates: response.updates.add().CopyFrom(update) response.update_index = req.last_received_update + len(new_updates) return response # SEPARATE THREAD IN CLIENT request = GetUpdatesRequest() request.last_received_update = -1 while True: stub = UpdaterStub(channel) try: 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 中国語 Web サイトの他の関連記事を参照してください。