2014-10-29 4 views
1

Будет ли перекручиваться поддержка прослушивания на нескольких портах с разными «обработчиками» (разным набором обратных вызовов для каждого порта) одновременно? По сути, я хочу, чтобы мой процесс размещал два сервера в одном процессе, каждый из которых выполнял другую функцию. Должен ли я использовать два реактора для этого?Скрученные с несколькими портами, протоколами и реакторами

ответ

2

Да, например, изменяющей quote server example вы могли бы добавить второй экземпляр прослушивает другой порт, с другой цитатой:

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

class QOTD(Protocol): 

    def connectionMade(self): 
     # self.factory was set by the factory's default buildProtocol: 
     self.transport.write(self.factory.quote + '\r\n') 
     self.transport.loseConnection() 


class QOTDFactory(Factory): 

    # This will be used by the default buildProtocol to create new protocols: 
    protocol = QOTD 

    def __init__(self, quote=None): 
     self.quote = quote or 'An apple a day keeps the doctor away' 

endpoint = TCP4ServerEndpoint(reactor, 8007) 
endpoint.listen(QOTDFactory("configurable quote")) 

endpoint2 = TCP4ServerEndpoint(reactor, 8008) 
endpoint2.listen(QOTDFactory("another configurable quote")) 

reactor.run() 

Выход:

$ nc localhost 8007 
configurable quote 
$ nc localhost 8008 
another configurable quote 
+0

Удивительный ответ. Как насчет того, хотел ли я добавить что-то еще, например, скрученный WebSocket. Могу ли я сделать это вместе с ними? –

+1

@horsehair Я не пробовал, но он должен работать нормально. Реактор в основном проверяет каждый сокет и отправляет данные в соответствующий протокол, когда он поступит. Вы используете http://autobahn.ws/? –

+0

Я пытаюсь определить, следует ли использовать autobahn.ws, но я начинал думать, что у Twister были встроенные функции, которые сделали использование autobahn в дополнение к этому избыточным. Для простого WebSocket, который просто передает сообщения, по крайней мере. Нет? –

Смежные вопросы