Как написать витой сервер, который также является клиентом? - PullRequest
9 голосов
/ 18 июля 2010

Как мне создать витой сервер, который также является клиентом?Я хочу, чтобы реактор прослушивал, и в то же время его можно использовать для подключения к тому же экземпляру сервера, который также может подключаться и прослушивать.

1 Ответ

15 голосов
/ 18 июля 2010

Звоните reactor.listenTCP и reactor.connectTCP.У вас может быть столько разных типов соединений - серверов или клиентов, сколько вы хотите.

Например:

from twisted.internet import protocol, reactor
from twisted.protocols import basic

class SomeServerProtocol(basic.LineReceiver):
    def lineReceived(self, line):
        host, port = line.split()
        port = int(port)
        factory = protocol.ClientFactory()
        factory.protocol = SomeClientProtocol
        reactor.connectTCP(host, port, factory)

class SomeClientProtocol(basic.LineReceiver):
    def connectionMade(self):
        self.sendLine("Hello!")
        self.transport.loseConnection()

def main():
    import sys
    from twisted.python import log

    log.startLogging(sys.stdout)
    factory = protocol.ServerFactory()
    factory.protocol = SomeServerProtocol
    reactor.listenTCP(12345, factory)
    reactor.run()

if __name__ == '__main__':
    main()
...