البث في gRPC: الاتصال من الخادم إلى العميل
عند إنشاء اتصال gRPC، غالبًا ما يكون من الضروري بث الأحداث أو التحديثات من الخادم إلى العملاء المتصلين. لتحقيق ذلك، يمكن استخدام أساليب مختلفة.
تيار الملاحظات
أحد الأساليب الشائعة هو استخدام التدفقات من جانب الخادم. يقوم كل عميل متصل بإنشاء دفق خاص به مع الخادم. ومع ذلك، فإن الاشتراك في تدفقات الخادم والعميل الأخرى بشكل مباشر غير ممكن.
الاستقصاء الطويل
الخيار البديل هو تنفيذ نهج الاستقصاء الطويل. يتضمن ذلك قيام العملاء باستقصاء الخادم بشكل مستمر على فترات زمنية منتظمة، والتحقق من وجود تحديثات جديدة. عند تلقي تحديث، سيتلقى العميل ردًا وينتظر فترة الاستقصاء التالية.
مثال للتنفيذ
إليك مثال لكيفية تنفيذ الاستقصاء الطويل باستخدام gRPC:
كود جانب الخادم
import threading
class UpdaterServer:
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:]
return GetUpdatesResponse(
updates=new_updates,
update_index=req.last_received_update len(new_updates),
)
رمز العميل (موضوع منفصل)
from threading import Event
def handle_updates(updates):
pass
event = Event()
request = GetUpdatesRequest(last_received_update=-1)
while not event.is_set():
try:
stub = UpdaterStub(channel)
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