私が理解していることから、IMAPにはユーザーごとに接続が必要です。一度に多くの(100、1000、おそらく10000以上)ユーザーをサポートするIMAPクライアント(現在はGmailのみ)を作成しています。明らかに、開いている接続の数を減らすことは素晴らしいことです。私の側でスレッドプールを使用してIMAP経由でGmailに接続することは可能か、それとも単にIMAPプロトコルでサポートされていないのか疑問に思っています。
1 に答える
IMAPは通常、SSL over TCP/IPを使用します。また、TCP / IP接続はIMAPクライアント接続ごとに維持する必要があります。つまり、同時に多くの接続が開かれます。
これらの複数の同時接続は、TCP接続の状態に影響を与えることなく、非スレッド(シングルスレッド)の実装で簡単に維持できます。IMAP TCP / IP接続ごとに何らかのフローの概念が必要であり、TCP / IP 5タプル(またはsocketFd)を使用して、すべてのフローをコンテナー(たとえば、c ++ STLマップ)に格納する必要があります。鍵。受信したデータパケットごとに、フローを検索し、それに応じてパケットを処理します。TCP接続やIMAP接続に影響を与えるこのアプローチについては何もありません。
これがシングルスレッド環境で機能することを考えると、スレッドプールを追加すると、アプリケーションのスループットが向上するだけです。これは、複数のフローのデータパケットを同時に処理できるためです(マルチコアCPUを想定)。 2つのスレッドが同じフローのデータパケットを同時に処理しないようにしてください。これにより、パケットが順不同で処理される可能性があります。アプローチとしては、スレッドごとにフローのグループを作成し、IPプールなどを使用することもできます。