gpt4 book ai didi

node.js - 为什么 WebSocket 实现在传输多个文件时比 HTTP/2 Push 慢? (Node.js/围棋)

转载 作者:数据小太阳 更新时间:2023-10-29 03:44:33 25 4
gpt4 key购买 nike

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

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

我的 Gorilla WebSocketnode-ws以下服务器:

开始

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())
}
}

Node

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);
}
});

最佳答案

参见 https://github.com/gorilla/websocket/issues/228 . OP 正在测量使用 HTTP/2 推送打开流的时间,而不是通过流传输所有数据的时间。 OP 发现 Websockets 比 HTTP/2 推送更快。

关于node.js - 为什么 WebSocket 实现在传输多个文件时比 HTTP/2 Push 慢? (Node.js/围棋),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42768309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com