考虑node.js的这个小型服务器
var net = require ('net');
var server = net.createServer(function (socket) {
console.log("Connection detected");
socket.on('end', function() {
console.log('server disconnected');
});
socket.write("Hello World");
socket.end();
});
server.listen("8888");
当我在Macbook Pro上使用Chrome测试服务器时,我在控制台中收到“Connection detected”消息的三倍。
我知道一个用于连接,另一个用于favicon,但第三个是什么呢?
答案 0 :(得分:5)
我使用Firefox和wget
(这是一个Linux命令行程序)进行了测试,并使用telnet
进行了深度调查。令人惊讶的是,所有这些都没有做任何额外的连接(显然他们甚至没有尝试下载favicon)。所以我解雇了Wireshark并捕获了一个会话,并很快发现Chorme系统地使无用的连接,即只有connects(SYN
,SYN-ACK
,{{ 1}})然后关闭连接(ACK
,RST
)而不发送任何内容。
快速googlin,我发现this bug report(摘录):
我怀疑“空”TCP连接是
- 备份TCP连接,
- IPv4 / IPv6并行连接,或
- TCP预连接,
醇>仅在原始TCP连接时才建立备份TCP连接 未在250毫秒内设置。 IPv4 / IPv6并行连接 仅当服务器同时具有IPv6和IPv6地址时才会生成 IPv6连接未在300毫秒内建立。既然你是 在localhost:8080测试本地服务器,你应该可以 快速连接,所以我怀疑你看到TCP 预连接。
要验证“空”TCP连接是否为TCP预连接,请打开 “扳手”菜单>设置>在引擎盖下>隐私,并清除 “预测网络操作以提高页面加载性能”复选框。 关闭并重新启动Chrome。 “空”TCP连接是否已消失?
有关详细参考,请参阅the linked thread,其中详细介绍了备份,并行和预连接以及是否/为什么这是一个很好的优化。