2013-07-18 35 views
1

我正在创建这个应用程序,并且我正在考虑使用Twisted通过XMPP(Jabber,聊天协议)与用户进行通信,以及未来可能使用其他通信方式。我的应用程序旨在支持,或者说,依靠(独立开发)的插件。大多数插件将大部分时间用于I/O。理想情况下,所有插件都会使用Deferreds来处理所有I/O并立即返回(即非阻塞),但是我担心要求插件开发人员这样做会带来太多的负担,并且会减慢并阻碍插件 - 发展。阻止高级库更常见(想想Facebook或Twitter库),并且在开发一个简单的10位本地Twitter库之前,要求一个可能不太好的编码人员阅读Deferreds,这听起来不像我想做的事情。扭曲和简单的插件开发

Twisted文档声明threadPool的最大默认大小为10,并且在“彻底改变线程池大小之前,我应该”小心您理解线程及其资源使用情况“,我不认为我做(理解),所以给每个插件一个自己的线程似乎也不是一个好主意。

有什么建议吗?

谢谢你的帮助。

[编辑]应用程序的独立(非服务器)版本也将可用。大多数插件开发人员可能会使用独立版本。这就是为什么我担心开发人员会选择简单的方法,并创建阻塞插件。

回答

2

请勿使用线程。

如何让不熟悉Twisted的人容易的事情的最佳示例是Scrapy定义its plugin interfaces的方式。你永远不会看reactorDeferred或其他任何东西 - 你只需定义在某些页面被抓取时做什么,就像回调一样。

或者,不要太担心它。有plenty of independently developed协议支持插件,直接使用Twisted API;在实施运输协议的层面上,大多数可以有效地做到这一点的人没有问题学习Twisted。

+1

非常感谢您的回复(并且对我晚了的一个抱歉!)。关于开发人员不理解延迟(尽管这也是一个有效的观点),但更多的是关于开发人员无法使用大多数阻塞的高级网络库。希望开发Facebook插件的开发人员不能使用任何现有库(OAuth/Graph API),因此他们很可能只是创建仅适用于独立版本而不适用于服务器的阻塞插件,并且我希望避免这一点。 – Taoelism

+0

最好在现有库上施加压力以制作事件驱动版本。首先,这并不难;其次,99%的实现可以在阻塞和事件驱动版本之间共享;第三,性能特点对于服务器(必须处理大量连接)和客户端(必须处理用户或网络输入任何时候)。另外,从我发现的结果来看,图书馆作者惊奇地愿意容纳他们的用户,所以试着请求一些OAuth或图形API库来添加Twisted支持! – Glyph