我正在使用 php 进行 webmail 开发,但是一直有一个问题,使用 imap_open 连接的时候,发现在 windows 上了连接 qq 很慢,单纯一个 imap_open 连接就要 5-6 秒,这里是代码
$a = time();
$user = "my username";
$password = "my password";
$mbox = @imap_open('{imap.qq.com:143/imap}INBOX',$user,$password);
var_dump(time()-$a);
var_dump(is_resource($mbox));
int(5)
bool(true)
但是连接 163 的时候速度很快,没有延迟; 接着我切换成 linux 系统,同样的代码,qq 没有延迟,163 延迟 20s,于是我在 linux 上用 telnet 做了个测试
秒获取数据,那应该不是网络问题,当我使用 strace 追踪连接的时候,发现在两个地方延迟很大
14:36:05 socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 4
14:36:05 connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("183.60.83.19")}, 16) = 0
14:36:05 gettimeofday({1543818965, 536641}, NULL) = 0
14:36:05 poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
14:36:05 sendto(4, "\207\213\1\0\0\1\0\0\0\0\0\0\00247\00250\003125\003123\7in-addr\4arpa\0\0\f\0\1", 44, MSG_NOSIGNAL, NULL, 0) = 44
14:36:05 poll([{fd=4, events=POLLIN}], 1, 5000
) = 0 (Timeout)
14:36:10 socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 5
14:36:10 connect(5, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("183.60.82.98")}, 16) = 0
14:36:10 gettimeofday({1543818970, 541177}, NULL) = 0
14:36:10 poll([{fd=5, events=POLLOUT}], 1, 0) = 1 ([{fd=5, revents=POLLOUT}])
14:36:10 sendto(5, "\207\213\1\0\0\1\0\0\0\0\0\0\00247\00250\003125\003123\7in-addr\4arpa\0\0\f\0\1", 44, MSG_NOSIGNAL, NULL, 0) = 44
14:36:10 poll([{fd=5, events=POLLIN}], 1, 5000
) = 0 (Timeout)
14:36:15 gettimeofday({1543818975, 546459}, NULL) = 0
14:36:15 poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
14:36:15 sendto(4, "\207\213\1\0\0\1\0\0\0\0\0\0\00247\00250\003125\003123\7in-addr\4arpa\0\0\f\0\1", 44, MSG_NOSIGNAL, NULL, 0) = 44
14:36:15 poll([{fd=4, events=POLLIN}], 1, 5000) = 1 ([{fd=4, revents=POLLIN}])
14:36:15 ioctl(4, FIONREAD, [44]) = 0
14:36:15 recvfrom(4, "\207\213\201\202\0\1\0\0\0\0\0\0\00247\00250\003125\003123\7in-addr\4arpa\0\0\f\0\1", 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("183.60.83.19")}, [16]) = 44
14:36:15 close(4) = 0
14:36:15 close(5) = 0
14:36:15 socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 4
14:36:15 connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("183.60.82.98")}, 16) = 0
14:36:15 gettimeofday({1543818975, 546840}, NULL) = 0
14:36:15 poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
14:36:15 sendto(4, "\207\213\1\0\0\1\0\0\0\0\0\0\00247\00250\003125\003123\7in-addr\4arpa\0\0\f\0\1", 44, MSG_NOSIGNAL, NULL, 0) = 44
14:36:15 poll([{fd=4, events=POLLIN}], 1, 5000
限制很迷茫,有了解过这方面的人吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.