Общий вопрос относительно использования или не использования Twisted в проекте TCP-прокси - PullRequest
1 голос
/ 04 ноября 2010

Мне нужно написать простой, но эффективный и масштабируемый прокси-сервер TCP, который бы принимал соединения по одному IP: PORT и передавал данные, возможно, большому количеству клиентов, прослушивающих свои пары IP: PORT.

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

Итак, что вы думаете по этому поводу?Является ли Twisted пустой тратой времени и лишним ресурсом, или он принесет некоторые преимущества (скорость, надежность, масштабируемость и т. Д.)?Может быть, есть что-то еще, что можно было бы использовать с большей легкостью и таким же успехом, как фреймворки Gevent или Eventlet?

1 Ответ

4 голосов
/ 04 ноября 2010

Twisted сделает ваш код проще, так как он уже проделал большую работу за вас. Например, вот эхо-сервер, использующий Twisted:

from twisted.internet.protocol import Protocol
class Echo(Protocol):
    def dataReceived(self, data):
        self.transport.write(data)

А вот балансировщик нагрузки TCP циклического перебора (непроверенный, но должен быть хотя бы близок к правильному):

from twisted.internet.protocol import Factory
from twisted.protocols.portforward import ProxyServer, ProxyFactory
class Balancer(Factory):
    def __init__(self, hostports):
        self.factories = []
        for (host, port) in hostports:
            self.factories.append(ProxyFactory(host, port))
    def buildProtocol(self, addr):
        nextFactory = self.factories.pop(0)
        self.factories.append(nextFactory)
        return nextFactory.buildProtocol(addr)

Является ли ваш существующий многопроцессорный код таким простым?

Если это так, есть еще тот факт, что Twisted будет работать с механизмами масштабируемости, специфичными для платформы (kqueue на MacOS / BSD, epoll на linux, IOCP на Win32), поэтому вы можете настроить свой код на наиболее подходящий механизм с помощью команды инструменты, вместо того, чтобы фактически переписывать ваш код.

...