получение порта прослушивания во время buildProtocol - PullRequest
1 голос
/ 23 ноября 2010

Я изменяю метод buildProtocol ServerFactory, в основном фабрика прослушивает порты 11000 и 12000, и у меня есть два протокола, по одному для порта на каждый порт.Я пытаюсь получить порт, который клиент использовал для прослушивания, чтобы я мог создать правильный протокол.

отл.клиент прослушивает порт 11000, создается экземпляр протокола 1.клиент прослушивает порт 12000, создается экземпляр протокола 2.

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

псевдокод:

def buildProtocol(self, address):
  if address connects at port 11000:
    proto = TransformProtocol()
  else:
    proto = TransformProtocol2()
  proto.factory = self
  return proto

1 Ответ

0 голосов
/ 24 ноября 2010

Я думаю, вам может понадобиться использовать Twisted сервисы: текст ссылки

Ваш код становится чем-то вроде:

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

class UpperCaseProtocol(basic.LineReceiver):
    def lineReceived(self, line):
        self.transport.write(line.upper() + '\r\n')
        self.transport.loseConnection()

class LowerCaseProtocol(basic.LineReceiver):
    def lineReceived(self, line):
        self.transport.write(line.lower() + '\r\n')
        self.transport.loseConnection()

class LineCaseService(service.Service):

    def getFactory(self, p):
        f = protocol.ServerFactory()
        f.protocol = p
        return f

application = service.Application('LineCase')
f = LineCaseService()

serviceCollection = service.IServiceCollection(application)
internet.TCPServer(11000,f.getFactory(UpperCaseProtocol)).setServiceParent(serviceCollection)
internet.TCPServer(12000,f.getFactory(LowerCaseProtocol)).setServiceParent(serviceCollection)

Но здесь у нас есть два заводских экземпляра.

...