"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > आप लॉन्ग-पोलिंग दृष्टिकोण का उपयोग करके जीआरपीसी में सर्वर-टू-क्लाइंट इवेंट प्रसारण को कैसे कार्यान्वित कर सकते हैं?

आप लॉन्ग-पोलिंग दृष्टिकोण का उपयोग करके जीआरपीसी में सर्वर-टू-क्लाइंट इवेंट प्रसारण को कैसे कार्यान्वित कर सकते हैं?

2024-11-03 को प्रकाशित
ब्राउज़ करें:226

How can you implement server-to-client event broadcasting in gRPC using a long-polling approach?

जीआरपीसी में सर्वर से क्लाइंट तक इवेंट का प्रसारण

एक सर्वर से कनेक्ट होने वाले कई क्लाइंट वाले एप्लिकेशन बनाते समय, इवेंट को प्रसारित करना अक्सर आवश्यक होता है सभी जुड़े हुए ग्राहक। जीआरपीसी में, इसे प्राप्त करने के लिए कई दृष्टिकोण हैं।

विचार करने के लिए एक विकल्प दीर्घकालिक-मतदान दृष्टिकोण का उपयोग करना है। इसमें अपडेट के लिए क्लाइंट से समय-समय पर सर्वर का सर्वेक्षण कराना शामिल है। जब कोई घटना घटती है, तो सर्वर सभी कनेक्टेड क्लाइंट को सूचित करता है, जिससे उनकी पोलिंग कॉल नई जानकारी के साथ वापस आ जाती है।

पायथन में एक लंबे-पोलिंग दृष्टिकोण को लागू करने के लिए, निम्नलिखित कोड पर विचार करें (एक समान कार्यान्वयन संभव है गो जैसी अन्य भाषाएँ):

# 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