当前位置:  开发笔记 > 编程语言 > 正文

以扭曲协议定期运行功能

如何解决《以扭曲协议定期运行功能》经验,为你挑选了1个好方法。

我正在寻找一种方法,通过连接到TCP端口的所有客户端定期发送一些数据.我正在看扭曲的python,我知道reactor.callLater.但是如何使用它定期向所有连接的客户端发送一些数据呢?数据发送逻辑在Protocol类中,并且根据需要由反应器实例化.我不知道如何将它从反应堆绑定到所有协议实例......



1> Jerub..:

您可能希望在Factory中为连接执行此操作.每次建立和丢失连接时都不会自动通知工厂,因此您可以从协议通知它.

下面是一个完整的示例,说明如何将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()

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有