витой и больше клиентов в сценарии

1

Здравствуйте
Я новичок в скрученном, но у меня есть вопросы после того, как вы прочитали инструкцию:
1. Как использовать разные протоколы с разными реакторами в одной программе? (например, txNetTools имеют собственный реактор и внутреннюю поддержку IRC в скрученном имеют собственный реактор от twisted.internet)
2. Как запустить еще одного клиента за один раз? (многие клиенты с ping на другой удаленный хост) http://bazaar.launchpad.net/~oubiwann/txnet/trunk/view/head:/sandbox/ping.py
3. Как перенести данные из одного протокола в другой (в одной программе)? Я хочу использовать данные из базы данных в протоколе. (например, каждые 5 минут получают хосты из базы данных и создают клиентов ping)
Моя задача проста, создайте другой клиент протокола для большого количества серверов.

Теги:
multithreading
asynchronous
twisted

2 ответа

1
Лучший ответ

Ну, для третьего вопроса, по крайней мере, вы говорите об использовании протоколов разных классов или нескольких экземпляров протокола одного и того же класса? Протокольные экземпляры могут связываться друг с другом, создавая factory, который создает их, храня их данные, например:

class p(Protocol):
    factory = None
    ...
class f(Factory):
    protocol = p
    data = None
    def buildProtocol(self, addr):
        returnValue = p()
        returnValue.factory = self
        return returnValue

Оттуда вы можете сохранить данные в self.factory.data из экземпляра протокола, и любой другой экземпляр протокола может получить к нему доступ. Надеюсь, это ответит на ваш вопрос.

  • 0
    Большое спасибо за ответ. Например, я хочу использовать фабрику соединений с базой данных и фабрику сети. Если я получаю данные в базе данных, я должен переместить данные в сеть Factory. Я думаю - понять, как это :) В фабрике базы данных после получения метода вызова данных в фабрике сети.
1

Как использовать разные протоколы с разными реакторами в одной программе?

Нет. В каждом процессе есть только один реактор, и он может обрабатывать столько соединений, сколько вы хотите. Подавляющее большинство библиотек не обеспечивают реактор, а реактор, предоставляемый txNetTools, является необязательным. Единственное, что он предоставляет, это этот метод:

def listenICMP(self, port, protocol, interface="", maxPacketSize=8192):
    p = icmp.Port(port, protocol, interface, maxPacketSize, self)
    p.startListening()
    return p

Если вы хотите использовать другой реактор, вы можете просто создать экземпляр icmp.Port самостоятельно.

Как запустить еще одного клиента за один раз?

Точно так же вы начинаете одно, но повторяетесь. Например, здесь десять одновременных пингеров (включая ответ на первый вопрос):

for i in range(10):
    p = icmp.Port(0, Pinger(), reactor=reactor)
    p.startListening()
reactor.run()

chameco дает прекрасный ответ на последний вопрос.

  • 0
    Спасибо за ответ. Я все понимаю :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню