【问题标题】:Create client/server with Twisted使用 Twisted 创建客户端/服务器
【发布时间】:2011-07-24 12:26:38
【问题描述】:

我正在尝试使用 Twisted 创建客户端/服务器。 我想创建一个守护进程,它将作为客户端连接到另一台服务器并充当其他客户端的服务器。 我写了一些我认为可以描述我的问题的东西:

server = sys.argv[1]
control_port = 8001

class ControlClient(protocol.Protocol):
    def makeConnection(self, transport):
        [some code here -snip-]
        self.firstOrder(order, transport)

    def firstOrder(self, action, transport):
        self.t = transport
        self.t.write(action + "\0")

    def sendOrder(self, action):
        self.t.write(action + "\0")

    def dataReceived(self, data):
        [some code here -snip-]
        [HERE I WANT TO SEND DATA TO CLIENTS CONNECTED TO MY TWISTED SERVER, USING CONTROL SERVER]

class ControlServer(ControlClient):
    def dataReceived(self, data):
        print "client said " + data

    def makeConnection(self, transport):
        self.t = transport
        self.t.write("make connection")
        print "make connection"

    def sendData(self, data):
        self.t.write("data")

class ClientFactory(protocol.ClientFactory):
    protocol = ControlClient

    def clientConnectionFailed(self, connector, reason):
        print "Connection failed - goodbye!"
        reactor.stop()

    def clientConnectionLost(self, connector, reason):
        print "Connection lost - goodbye!"
        reactor.stop()

class ServerFactory(protocol.ServerFactory):
    protocol = ControlServer

def main():
    c = ClientFactory()
    reactor.connectTCP(server, control_port, c)
    s = ServerFactory()
    reactor.listenTCP(9000, s)
    reactor.run()

if __name__ == '__main__':
    main()

如您所见,我想(作为服务器)发送一些接收到的数据(作为客户端)。我的问题当然是我的 ServerControl 没有在我的 ClientControl 中实例化,所以我无法访问向客户端发送数据所需的传输。

【问题讨论】:

    标签: python client twisted


    【解决方案1】:

    您似乎唯一缺少的是,您可以保留一个客户端连接列表,并使该列表可用于尝试向所有客户端发送数据的代码。

    在 Twisted FAQ 中有一个例子:http://twistedmatrix.com/trac/wiki/FrequentlyAskedQuestions#HowdoImakeinputononeconnectionresultinoutputonanother

    那个例子只有一个工厂,但是思路是一样的。要处理两个工厂的案例,只需给一个工厂引用另一个工厂即可。

    【讨论】:

    • 嗨,谢谢你的回答,我会试试这个。这似乎是一个很好的解决方案。
    • 好吧,再次感谢您的帮助,它工作得非常好!祝你有美好的一天 =)
    • 啊,你是一个扭曲的开发者;=)
    猜你喜欢
    • 2013-07-30
    • 2013-12-24
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2010-11-29
    • 2012-09-29
    • 2019-02-28
    相关资源
    最近更新 更多