0

据我了解,IMAP 要求每个用户都有一个连接。我正在编写一个 IMAP 客户端(目前只是 gmail),它一次支持许多(100s,1000s 可能 10000s+)用户。显然,减少打开连接的数量会很棒。我想知道是否可以在我这边使用线程池通过 IMAP 连接到 gmail,或者 IMAP 协议是否不支持。

4

1 回答 1

2

IMAP 通常使用基于 TCP/IP 的 SSL。每个 IMAP 客户端连接都需要维护一个 TCP/IP 连接,这意味着将有许多同时打开的连接。

这些多个同时连接可以很容易地在非线程(单线程)实现中维护,而不会影响 TCP 连接的状态。每个 IMAP TCP/IP 连接都必须有某种流概念,并使用 TCP/IP 五元组(或 socketFd)将所有流存储在容器中(例如 c++ STL 映射)作为钥匙。对于收到的每个数据包,查找流并相应地处理数据包。这种方法不会影响 TCP 或 IMAP 连接。

考虑到这将在单线程环境中工作,添加线程池只会增加应用程序的吞吐量,因为您可以同时处理多个流的数据包(假设它是多核 CPU)您只需要使确保 2 个线程不会同时处理同一流的数据包,这可能会导致数据包被无序处理。一种方法可能是每个线程有一组流,可能使用 IP 池或类似的东西。

于 2012-06-13T16:34:34.697 回答