-3
我一直在使用Node和Go中的WebSockets和HTTP/2库进行实验。我的基本设置是创建客户端和服务器,重复从服务器发送文件并测量时间,直到每个文件在客户端可用。为什么在传输多个文件时WebSocket的实现比HTTP/2 Push慢呢? (Node.js/Go)
令我惊讶的是,HTTP/2 Push实现的性能明显优于WebSocket(总时间快5倍以上)。难道我做错了什么?
我Gorilla WebSocket和node-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())
}
}
节点
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);
}
});
您只显示相关代码的三分之一(只有Websocket服务器,而不是HTTP/2推送或客户端实现),并询问您没有粘贴的结果(但您已经总结)...我们如何期待对此做出反应? – Myst
另一个说明:HTTP/2推送在浏览器中具有HTTP缓存的优点,以及HTTP/2是跨所有请求(不打开新连接)的持久TCP/IP连接的优点,而新Websocket连接每次刷新页面时都会打开。我不确定你的要求是什么,但测试可能会有点偏向于HTTP/2(当涉及到第一次客户端/连接时,这些速度是不正确的)。 – Myst