2014-03-01 25 views
-1

嗨,我正在實施電子郵件客戶端應用程序。我的要求是我需要監視指定的IMAP服務器中可用的所有郵箱。我爲每個郵箱創建單獨的TCP連接。但是我從IMAP服務器斷開連接。我正在嘗試使用Gmail /雅虎作爲測試目的。是否有限制打開從相同的IP多個連接到特定的IMAP服務器?特別是在Gmail和雅虎。是否有限制從同一個ip地址打開imap連接?

或反正是有監控單個連接的所有郵箱,而不使用IMAP-NOTIFY似乎並不在Gmail /雅虎支持...

請幫我...

+1

一般而言,許多服務器軟件的內置限制都是爲了防止濫用,並且會限制爲每個帳戶一定數量的連接,每個IP的連接數。無論你正在構建什麼,都會聽起來有點像惡意軟件。 – Max

回答

1

這是我之前在stackoverflow上回答的,但現在只能通過wayback machine獲得。問題是關於如何「殺死太多並行IMAP連接」。重印下面;核心外賣消息是,由於某種原因,大多數服務器管理員喜歡擁有較少數量的短暫連接,而不是更長時間內處於活動狀態的更多連接,但他們大部分時間都在後臺默默無聞地閒置。他們沒有得到的是,IMAP協議是設計的考慮到長期連接,並試圖防止導致浪費資源,因爲客戶端將不斷地重新同步郵箱,因爲它們在它們之間跳躍。

原始答案如下:

不是,這是一個非常錯誤的想法。 IMAP旨在監控單個郵箱需要一個連接;在大多數IMAP服務器實現中,這意味着一個進程。但是,除非用戶使用的客戶端嚴重中斷,否則所有這些連接都會進入IDLE模式。在IDLE中,客戶端被動地通知郵箱狀態的任何更新。如果禁用這些連接,則客戶端必須主動輪詢許多郵箱中的更改。現在爲自己做決定 - 更糟糕的是,有十個進程閒置,還是一個進程每兩分鐘進行一次大量輪詢?哪些解決方案會消耗更多能源,CPU時間和IO操作?這是針對並行連接的數量。

第二個問題是關於長期連接。同樣,這是IMAP的一個關鍵方面 - 每個連接都有很多相關的狀態信息,這些信息的獲取相當昂貴。除非你的服務器實現了某些擴展並且你的客戶使用它們(ESEARCH,CONDSTORE,QRESYNC是關鍵的位),否則打開郵箱可能需要O(n)操作。我不知道您的用戶有多少條消息,但是您是否真的想要傳輸當你決定殺死一個連接,因爲它已被激活爲「太久」,250k消息的消息標誌?

最後,任何合理的IMAP服務器供應商都提供了一種配置每用戶會話限制併發進程數的方法。使用它比維護用於臨時「殺死未使用」連接的腳本好得多。

如果您想了解有關同步過程的更多信息,我的關於在帶有片狀網絡和有限資源的客戶端上使用IMAP的論文介紹了爲了向用戶顯示郵箱更新視圖,客戶端必須執行的操作。

+0

真的很好的解釋... – Pyare