سؤال

وأنا أبحث عن وسيلة لارسال دورية بعض البيانات على جميع عملاء متصلة بمنفذ TCP. أنا أبحث في الثعبان الملتوي وأنا على علم reactor.callLater. ولكن كيف يمكنني استخدامه لإرسال بعض البيانات لجميع العملاء على اتصال بشكل دوري؟ ارسال منطق البيانات في الصف البروتوكول ويتم إنشاء مثيل من قبل مفاعل حسب الحاجة. أنا لا أعرف كيف لادراك التعادل من المفاعل لجميع الحالات بروتوكول ...

هل كانت مفيدة؟

المحلول

وربما كنت تريد أن تفعل ذلك في مصنع للاتصالات. لم يتم إخطار مصنع تلقائيا كل مرة يتم إجراء اتصال وخسر، حتى تتمكن من يشعر به من البروتوكول.

وهنا مثال كامل لكيفية استخدام twisted.internet.task.LoopingCall بالتزامن مع مصنع الأساسي مرغوب و البروتوكول أن أعلن أن '10 ثانية قد مرت "إلى كل اتصال كل 10 ثانية.

from twisted.internet import reactor, protocol, task

class MyProtocol(protocol.Protocol):
    def connectionMade(self):
        self.factory.clientConnectionMade(self)
    def connectionLost(self, reason):
        self.factory.clientConnectionLost(self)

class MyFactory(protocol.Factory):
    protocol = MyProtocol
    def __init__(self):
        self.clients = []
        self.lc = task.LoopingCall(self.announce)
        self.lc.start(10)

    def announce(self):
        for client in self.clients:
            client.transport.write("10 seconds has passed\n")

    def clientConnectionMade(self, client):
        self.clients.append(client)

    def clientConnectionLost(self, client):
        self.clients.remove(client)

myfactory = MyFactory()
reactor.listenTCP(9000, myfactory)
reactor.run()

نصائح أخرى

وأتصور أسهل طريقة للقيام بذلك هو أن إدارة قائمة العملاء في بروتوكول مع connectionMade وconnectionLost في عميل ومن ثم استخدام LoopingCall أن نسأل كل عميل لإرسال البيانات.

وهذا يشعر الغازية قليلا، لكني لا أعتقد أنك تريد أن تفعل ذلك دون وجود بعض السيطرة على الإرسال / الاستقبال البروتوكول. بالطبع، كنت قد لمعرفة التعليمات البرمجية لتعرف حقا كيف انها تريد ان تتفق تماما. حصلت على رابط جيثب؟ :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top