-3
저는 Node and Go에서 WebSockets 및 HTTP/2 라이브러리를 실험했습니다. 기본 설정은 클라이언트와 서버를 만들고 서버에서 파일을 반복적으로 보내고 클라이언트에서 각 파일을 사용할 수있을 때까지의 시간을 측정하는 것입니다.WebSocket 구현이 HTTP/2보다 느린 이유는 무엇입니까? 여러 파일을 전송할 때 밀어 넣기가 필요합니까? (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);
}
});
HTTP/2 푸시 또는 클라이언트 측 구현이 아닌 웹 소켓 서버 만 관련 코드의 3 분의 1 만 표시하고 붙여 넣지 않은 결과에 대해 묻습니다 (요약했지만 ...). 우리는 어떻게 이것에 반응 할 것으로 예상됩니까? – Myst
또 다른 참고 사항 : HTTP/2 푸시는 브라우저에서 HTTP 캐싱의 장점과 모든 요청 (새로운 연결이 열리지 않음)에서 영구적 인 TCP/IP 연결이라는 이점뿐만 아니라 새로운 Web 소켓 연결 페이지를 새로 고칠 때마다 열립니다. 귀하의 요구 사항은 무엇인지 모르겠지만 HTTP/2에 약간의 편향이있을 수 있습니다 (이 속도는 처음 클라이언트/연결시 정확하지 않습니다). – Myst