質問

いなければならないというニーズを定期的に送信データは全てのお客様に接続のTCPポートです。今回はしっかりとねじれたpythonとい原子炉である。callLater.ものの使い方を教えてくださいで送信データは接続したすべてのお客様は定期的に?データの送信ロジックプロトコルのクラスではインスタンス化による原子炉として必要です。られるかわかりませんでから原子炉の全ての議定書のインスタンス...

役に立ちましたか?

解決

いろいこの工場に接続します。工場には自動的に通知時接続では、まったく新しい概念の中でできにゅうこくからのプロトコルです。

ここでは例の使い方を多数作られたのが始まりである。インターネット。課題です。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を使用して各クライアントにデータの送信を依頼することです。

それは少し侵襲的に感じますが、プロトコルが送信/受信を制御することなくそれをしたいとは思わないでしょう。もちろん、私はあなたのコードを見て、それがどのようにうまく適合するかを本当に知る必要があります。 githubリンクを取得しましたか? :)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top