使用twisted,如何保持客户端对象

2024-04-25 03:34:59 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的简单twisted服务器代码:

from twisted.internet.protocol import Protocol,Factory
from twisted.internet import reactor

class MultiEcho(Protocol):
    def __init__(self, factory):
        self.recvBuf = ""
        self.factory = factory

    def connectionMade(self):
        self.factory.echoers.append(self)
        print self.factory.echoers

    def dataReceived(self, data):
        self.recvBuf += data
        self.transport.write(data)

    def connectionLost(self, reason):
        self.factory.echoers.remove(self)

class MultiEchoFactory(Factory):
    def __init__(self):
        self.echoers=[]

    def buildProtocol(self, addr):
        return MultiEcho(self)

if __name__ == '__main__':
    reactor.listenTCP(4321, MultiEchoFactory())
    reactor.run()

使用“telnet 127.0.0.1 4321”将打印列表:

[<__main__.MultiEcho instance at 0x0000000002EA6B08>]

添加另一个“telnet 127.0.0.1 4321”,列表为:

[<__main__.MultiEcho instance at 0x0000000002EA6B08>, <__main__.MultiEcho instance at 0x0000000002EA6EC8>]

我知道客户端是协议对象的实例,列表是MultiEchoFactory.echoers,所以我想保留这个列表, 使用list[n].transport.write(somedata)将它们导入另一个.py文件。你知道吗

我试着from myserver import MultiEchoFactory,但是MultiEchoFactory.Echors公司是空的。 我还重写了代码

class MultiEchoFactory(Factory):
    def __init__(self):
        self.echoers=[]

class MultiEchoFactory(Factory):
    echoers=[]

但我仍然不能在另一个.py文件中使用协议列表。 那么,我该怎么办?你知道吗


Tags: fromimportself列表initmainfactorydef
1条回答
网友
1楼 · 发布于 2024-04-25 03:34:59

您需要将其保存在buildProtocol(),即:

class MultiEchoFactory(Factory):
    echoers=[]

    def buildProtocol(self, addr):
        echoer = MultiEcho(self)
        MultiEchoFactory.echoers.append(echoer)
        return echoer

相关问题 更多 >