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