2013-07-18 36 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