我需要编写简单但有效且可扩展的TCP代理,它可以接受一个IP上的连接:PORT并将数据转发给可能有大量客户端侦听其IP:PORT对。
问题是,如果有理由在这里使用Twisted?有没有收获,我现在看不到,但是会看到项目完成吗?我问这个问题,主要是因为Twisted非常复杂,而且它的文档并不是新手友好的 - 我使用纯Python套接字和多进程模块或多或少地完成了代码,并且使用Twisted编写的代码已经让我头疼。
那么,你对此有何看法? Twisted是浪费时间和过度杀伤,还是会带来一些好处(速度,稳健性,可扩展性等)?也许还有其他东西可以更轻松和更成功地使用,比如Gevent或Eventlet框架?
答案 0 :(得分:4)
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仍然可以使用特定于平台的可扩展性机制(MacOS / BSD上的kqueue,Linux上的epoll,Win32上的IOCP),因此您可以使用命令将代码调整到最合适的机制线工具,而不是必须实际重写代码。