我一直在使用扭曲的框架大约一个星期(更多是因为好奇而不是必须使用它)并且它在进行事件驱动的异步网络编程时非常有趣.
但是,有些事我无法理解.扭曲的文档开始于
Twisted是一个非常灵活的框架,可以编写功能强大的服务器.
我的疑问是: - 为什么我们需要这样一个事件驱动的库来编写功能强大的服务器,因为那里已经有非常高效的各种服务器实现了?
当然,在编写这个事件驱动的I\O库时,扭曲的开发人员必须考虑的不止一些具体实现.那些是什么?为什么要扭曲?
在对另一个答案的评论中,你说"每个图书馆都应该......"."假设"由谁?使用案例肯定是确定要求的好方法,但这不是唯一的方法.同时讨论所有Twisted的用例也没有意义.没有用例证明Twisted中的每个API都是合理的.有数百或数千个不同的用例,每个用例都证明Twisted的细分较小或较大.这些经历了Twisted开发的多年来,并没有尝试保留它们的列表.我可以说我在扭曲名称的一部分工作,所以我会有一个主题,我当时正在介绍一篇论文.我在Twisted Conch中实现了vt102解析器,因为我迷恋终端并想要一个涉及它们的有趣项目.我在Twisted Mail中实现了IMAP4支持,因为我在一家开发邮件服务器的公司工作,该邮件服务器需要比当时提供的任何其他IMAP4服务器更严格地控制邮件存储.
因此,正如您所看到的,Twisted的不同部分是出于各种不同的原因编写的(我只给出了我自己的原因的例子,而不是任何其他开发人员的原因).
从长远来看,编写程序的最初原因通常并不重要.现在编写代码:Twisted Names现在为互联网上的许多域名运行DNS,vt102解析器帮助我找到了工作,推动IMAP4开发的公司已经停业.真正重要的是你现在可以用代码做些什么.正如MattH指出的那样,由此产生的过多功能导致了一个库(可能是唯一的)解决了一系列有趣的问题.
为什么我们需要这样一个事件驱动的库来编写功能强大的服务器,因为那里已经有非常高效的各种服务器实现?
所以解释:你无法想象为什么有人在染色产品已经存在时需要一个工具包?
我猜你从来不需要敲响协议网关,例如
- 通过unix套接字按需编写md5本地文件的守护进程
- 使用udp查询一个软件并通过http公开统计信息.
我在几分钟内就SO的问题为第二个例子写了一个小概念验证.没有扭曲,我不能那样做.
你看过:ProjectsUsingTwisted吗?
更多关于'为什么':( 免责声明:我不是Twisted的开发者),有必要考虑Twisted的高龄(相对于Python).当写入Twisted时,没有足够强大的非阻塞网络/事件驱动库围绕反应器模式编写(几乎每个人都在使用线程).Twisted的初始用例是一款大型多人游戏,虽然这款游戏的具体细节似乎有些丢失.
自从@ MattH的链接提示以来,用Python编写的大量各种网络服务器基于Twisted.