-3
私はNode and GoでWebSocketsとHTTP/2ライブラリを試しています。私の基本的なセットアップは、クライアントとサーバーを作成し、サーバーからファイルを繰り返し送信し、各ファイルがクライアントで利用可能になるまでの時間を測定することです。WebSocketの実装がHTTP/2よりも遅いのはなぜですか複数のファイルを転送する際のプッシュ? (Node.js/Go)
私の驚いたことに、HTTP/2プッシュの実装は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);
}
});
HTTP/2プッシュやクライアント側の実装ではなく、関連するコードの1/3しか表示されていません(貼り付けられなかった結果を要約しましたが)。私たちはこれにどのように反応すると予想されますか? – Myst
別の注記:HTTP/2プッシュでは、ブラウザ上でのHTTPキャッシュの利点と、すべての要求(新しい接続が開かれていない)で永続的なTCP/IP接続であるという利点があります。ページを更新するたびに開かれます。私はあなたの要求が何であるか分かりませんが、テストはHTTP/2に少し偏っているかもしれません(これらの速度は最初のクライアント/接続に関しては正しくありません)。 – Myst