بث الأحداث في gRPC من الخادم إلى العملاء
عند إنشاء تطبيقات تتضمن عملاء متعددين يتصلون بالخادم، غالبًا ما يكون من الضروري بث الأحداث إلى كافة العملاء المتصلين. في gRPC، هناك عدة طرق لتحقيق ذلك.
أحد الخيارات التي يجب مراعاتها هو استخدام نهج الاقتراع الطويل. يتضمن ذلك قيام العملاء باستقصاء الخادم بشكل دوري للحصول على التحديثات. عند وقوع حدث ما، يقوم الخادم بإعلام جميع العملاء المتصلين، مما يؤدي إلى استدعاءات الاستقصاء الخاصة بهم للعودة بالمعلومات الجديدة.
لتنفيذ نهج الاستقصاء الطويل في بايثون، ضع في اعتبارك الكود التالي (يمكن تنفيذ مماثل في لغات أخرى مثل 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