在 Windows 7 上接受一个套接字需要一秒钟以上 [英] Accepting a socket on Windows 7 takes more than a second

查看:23
本文介绍了在 Windows 7 上接受一个套接字需要一秒钟以上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我所做的:

  • 我编写了一个最小的网络服务器(使用 Qt,但我认为这与此处无关).
  • 我在合法的 32 位 Windows 7 上运行它.

问题:

  • 如果我使用 Firefox、IE、Chrome 或 Safari 发出请求,大约需要一秒钟时间,我的服务器才会发现有新的连接可以被接受.

线索:

  • 使用 Firefox、IE、Chrome、Safari 以外的其他客户端(wget,自己的测试客户端,只打开一个套接字),看到新连接只需几毫秒.
  • 我安装了 Apache 并尝试了上面提到的客户端.处理请求需要大约 50 毫秒的时间.
  • 在运行 Windows XP(或在 Linux 下编译和运行相同代码)时无法重现该问题
  • 这个问题似乎只有在连接到本地主机时才会出现.一位朋友通过 Internet 连接并为该连接提供服务只需几毫秒.
  • 在不同端口运行服务器对 1 秒延迟没有影响

这是我尝试过但不走运的方法:

Here's what I've tried without luck:

  • 停止了 Windows Defender 服务
  • 停止了 Windows 防火墙服务

有什么想法吗?这是 Windows 7 中的一些聪明的安全功能"吗?为什么 Apache 不受影响?为什么只有浏览器会受到影响?

Any ideas? Is this some clever 'security feature' in Windows 7? Why isn't Apache affected? Why are only the browsers affected?

推荐答案

如果您说的是localhost"而不是127.0.0.1",则是在实际连接尝试之前强制进行名称查找,从而增加了延迟.

If you're saying "localhost" instead of "127.0.0.1", you're forcing a name lookup before the actual connection attempt, adding delay.

此外,某些浏览器(如 Firefox 3.5+)不使用操作系统的 DNS 查找机制,这就是为什么它的性能可能与 wget 等不同.

In addition, some browsers, like Firefox 3.5+, don't use the operating system's DNS lookup mechanism, which is why it can have different performance than, say, wget.

这篇关于在 Windows 7 上接受一个套接字需要一秒钟以上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆