gRPC でのサーバーからクライアントへのイベントのブロードキャスト
サーバーに接続する複数のクライアントが関与するアプリケーションを作成する場合、多くの場合、サーバーにイベントをブロードキャストする必要があります。接続されているすべてのクライアント。 gRPC では、これを実現するためのアプローチがいくつかあります。
考慮すべきオプションの 1 つは、ロングポーリング アプローチを使用することです。これには、クライアントに更新のためにサーバーを定期的にポーリングさせることが含まれます。イベントが発生すると、サーバーは接続されているすべてのクライアントに通知し、ポーリング呼び出しをトリガーして新しい情報を返します。
Python でロングポーリングアプローチを実装するには、次のコードを検討してください (同様の実装は、 Go などの他の言語):
# 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
この例では:
ロングポーリングアプローチを使用すると、接続されているすべてのクライアントがブロードキャスト イベントを確実に受信し、複数の関係者に更新を伝達するための信頼できる方法が提供されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3