Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么WebSocket实现在传输多个文件时比HTTP/2推送慢?(Node.js/Go)_Node.js_Go_Websocket_Http2_Server Push - Fatal编程技术网

为什么WebSocket实现在传输多个文件时比HTTP/2推送慢?(Node.js/Go)

为什么WebSocket实现在传输多个文件时比HTTP/2推送慢?(Node.js/Go),node.js,go,websocket,http2,server-push,Node.js,Go,Websocket,Http2,Server Push,我一直在Node和Go中试验WebSockets和HTTP/2库。我的基本设置是创建一个客户端和服务器,从服务器重复发送一个文件,并测量每个文件在客户端可用的时间 令我惊讶的是,HTTP/2推送实现的性能明显优于WebSocket,总时间比WebSocket快5倍多。我做错什么了吗 我的电脑和服务器如下: 去 节点 看。OP测量的是使用HTTP/2推送打开流的时间,而不是通过流传输所有数据的时间。OP发现Websocket比HTTP/2推送更快。您只显示了三分之一的相关代码—只有Websocke

我一直在Node和Go中试验WebSockets和HTTP/2库。我的基本设置是创建一个客户端和服务器,从服务器重复发送一个文件,并测量每个文件在客户端可用的时间

令我惊讶的是,HTTP/2推送实现的性能明显优于WebSocket,总时间比WebSocket快5倍多。我做错什么了吗

我的电脑和服务器如下:

节点


看。OP测量的是使用HTTP/2推送打开流的时间,而不是通过流传输所有数据的时间。OP发现Websocket比HTTP/2推送更快。

您只显示了三分之一的相关代码—只有Websocket服务器,而不是HTTP/2推送或客户端实现—并询问您没有粘贴的结果,但您总结了。。。我们应该如何对此做出反应?另一个注意事项是:HTTP/2推送既有浏览器上HTTP缓存的优点,也有HTTP/2是跨所有请求的持久TCP/IP连接的优点—不打开新连接,而每次刷新页面时都会打开新的Websocket连接。我不确定您的要求是什么,但是测试可能有点偏向HTTP/2。对于第一次客户端/连接,这些速度是不正确的。
package main

import (
  "net/http"
  "io/ioutil"
  "log"
  "github.com/gorilla/websocket"
)

var file []byte

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

func handler(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Fatal(err)
    }

    for i := 0; i < 100; i++ {
      conn.WriteMessage(2, file)
    }
}

func main() {
  file, _ = ioutil.ReadFile("<path-to-file>")

  http.HandleFunc("/", handler)
  err := http.ListenAndServeTLS(":443", "<path-to-cert>", "<path-to-key>", nil)
  if err != nil {
    panic("ListenAndServe: " + err.Error())
  }
}
const WebSocket = require('ws');
const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('<path-to-key>'),
  cert: fs.readFileSync('<path-to-cert>')
};

var file = fs.readFileSync('<path-to-file>')

var httpServer = new https.createServer(options).listen(443);

var wss = new WebSocket.Server({
  server: httpServer,
  perMessageDeflate: false
});

wss.on('connection', function(ws) {
  for (let i = 0; i < repetition; i++) {
    ws.send(file);
  }
});