Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 从chrome到node-http2服务器使用HTTP / 2时,查看多个TCP连接大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
更新(对任何对结果感兴趣的人:)

我无法弄清楚为什么chrome和node-http2服务器之间的下一次协议协商失败.我的怀疑是自签名证书或ALPN / NPN支持问题.所以我移动到golang HTTP/2 implementation.相同的设置工作完美,我看到单个多路复用TCP连接(chrome – > golang)

我一直在阅读关于http / 2以及它如何解决http / 1.1的延迟问题,每个主机使用单个多路复用TCP连接,所以我决定尝试一下.

本实验

>创建了一个简单的html文件,引用了一个css,一个js和几个图像.
> Node.js中的一个简单的http服务器,它提供所有这文件
>使用chrome来发出http请求
>在Ubuntu(tcptrack)上使用tcptrack来跟踪对http服务器的TCP连接.

tcptrack窗口显示已建立4个连接.因此浏览器为图像和css / js请求打开了不同的连接.

我使用tcpdump得到类似的输出.
供参使用tcptrack命令

和tcpdump也显示类似的输出

服务这些文件的简单的一体化http服务器如下所示(相关代码)

(function(){
  ...........
  var server = http.createServer(function(request,responsE) {
      ..........
      fs.readFile(filetoRet,function (err,data) {
      if(filePath.indexOf(".jpg") >-1){
        response.writeHead(200,{"Content-Type": "image/jpg"});
      }.....
      
      response.write(data);
      response.end();
      });

   
  });
   

  server.listen(8989);  
})()

在此之后我尝试使用http / 2.

>启用chrome标志以发送http / 2请求
>使用node-http2创建了一个http / 2服务器
>简单的http服务器与http / 1.1具有相同的代码,只是它使用步骤2中安装的http2服务器模块.
>使用chrome发出请求(它需要是一个内联http / 2规范的https请求)
>捕获tcptrack / tcpdump输出

因此,这仍然显示正在进行多个TCP连接.此外,如果我增加html中的图像数量,连接数会增加.

所以@R_932_6618@读这个.这是http / 2应该如何表现(或者这是一个chrome bug)?
有没有更好的方法使用简单http / 2客户端服务器可视化http / 2增益?

注意:我正在为http / 2服务器使用自签名证书,因此chrome在继续访问页面之前会发出警告,可能那些已关闭的连接代表它但我不认为它会影响协议请求页面及其组件的方式

感谢大家耐心阅读本文并感谢任何建议.

@H_363_5@msingh

P.S:Wireshark TCP捕获也不例外.只是我发现在Wireshark中隔离流量更难,所以使用了tcpdump和tcptrack.

更新:
更新:查看chrome:// net-internals / http / 2请求协商失败,它回退到使用http / 1.1.还不明白原因.

Chrome内部工具事件显示

t=879052 [st= 0] +http_STREAM_JOB  [dt=19]
                  --> original_url = "https://msinghlinux.ads.com:8900/"
                  --> priority = "HIGHEST"
                  --> url = "https://msinghlinux.ads.com:8900/"
t=879052 [st= 0]   +PROXY_serviCE  [dt=0]
t=879052 [st= 0]      PROXY_serviCE_RESOLVED_PROXY_LIST
                      --> pac_String = "DIRECT"
t=879052 [st= 0]   -PROXY_serviCE
t=879052 [st= 0]   +HOST_RESOLVER_IMPL_requEST  [dt=0]
                    --> address_family = 0
                    --> allow_cached_response = true
                    --> host = "msinghlinux.ads.com:8900"
                    --> is_speculative = false
t=879052 [st= 0]      HOST_RESOLVER_IMPL_CACHE_HIT
t=879052 [st= 0]   -HOST_RESOLVER_IMPL_requEST
t=879052 [st= 0]   +SOCKET_POOL  [dt=19]
t=879071 [st=19]      SOCKET_POOL_BOUND_TO_CONNECT_JOB
                      --> source_dependency = 26961 (CONNECT_JOB)
t=879071 [st=19]      SOCKET_POOL_BOUND_TO_SOCKET
                      --> source_dependency = 26967 (SOCKET)
t=879071 [st=19]   -SOCKET_POOL
t=879071 [st=19]    http_STREAM_requEST_PROTO
                    --> next_proto_status = "negotiated"
                    --> proto = "http/1.1"
t=879071 [st=19]    http_STREAM_JOB_BOUND_TO_requEST
                    --> source_dependency = 26910 (URL_requEST)
t=879071 [st=19] -http_STREAM_JOB

一个协议的值是http / 1.1(next_proto_status和proto).但它没有说明在谈判中导致这种后退失败的原因是什么?
可以自签名证书吗?

http / 2服务器代码

var options = {
  key: fs.readFileSync('./server.key'),cert: fs.readFileSync('./server.crt')
};

options.log = bunyan.createLogger(...);
require('http2').createServer(options,function(request,responsE) {
      .... same code as http/1.1 server


}).listen(8900);

解决方法

我怀疑你实际上并没有使用http / 2.有一个FF插件,我认为Chrome的一些选项可以显示地址栏中使用的协议.

请注意,http2将通过多种方法为您提供更低的延迟.

单个连接本身最初不会给你太多改进的延迟,至少在它的流控制窗口增加之前是这样.单一连接的关键在于它可以将窗口扩展到最佳大小,并且您可以停止为每个创建的新连接获得缓慢的启动延迟.

http / 2也有一个推送机制,服务器可以知道CSS,JS和图像与页面相关联,并主动将它们推送到客户端以及获取html的请求.这节省了往返时间来解析HTML然后发送新请求.如果资源数量超过6(http1事实上的连接限制),则会节省更多的往返次数.

我们在我们的网站上运行jetty http2,我们有一个页面,演示在https://webtide.com/http2-tests/push/推送

该图像由许多小图像组成,您倾向于看到使用http / 1单独加载,但如果您使用http / 2,它们将作为块加载

大佬总结

以上是大佬教程为你收集整理的node.js – 从chrome到node-http2服务器使用HTTP / 2时,查看多个TCP连接全部内容,希望文章能够帮你解决node.js – 从chrome到node-http2服务器使用HTTP / 2时,查看多个TCP连接所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。