Как написать скрученный сервер, который также является клиентом?

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


person Marconi    schedule 18.07.2010    source источник


Ответы (1)


Позвоните 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()
person Jean-Paul Calderone    schedule 18.07.2010
comment
гм.. Я не понимаю, как использовать тот же код выше для подключения к прослушивающему серверу, не могли бы вы просветить меня, пожалуйста? - person Marconi; 19.07.2010
comment
Кроме того, у вас есть идеи, как я мог бы использовать это в сочетании со стандартом? Скажем, пока сервер/клиент может принимать/подключаться в фоновом режиме, я также хочу иметь возможность вводить команды. - person Marconi; 19.07.2010
comment
Приведенный выше код устанавливает исходящее соединение. Это то, что делает connectTCP в lineReceived. Чем это отличается от того, что вы хотите? Кроме того, чтобы использовать его с stdio, просто создайте в какой-то момент экземпляр twisted.internet.stdio.StandardIO. Подобно listenTCP и connectTCP, это источник событий, который вы можете создать и сосуществовать практически с любым другим источником событий от Twisted. - person Jean-Paul Calderone; 20.07.2010