在 Windows 7 上接受一个套接字需要一秒钟以上 [英] Accepting a socket on Windows 7 takes more than a second
本文介绍了在 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屋!
查看全文