2017-03-13 3 views
-3

私はNode and GoでWebSocketsとHTTP/2ライブラリを試しています。私の基本的なセットアップは、クライアントとサーバーを作成し、サーバーからファイルを繰り返し送信し、各ファイルがクライアントで利用可能になるまでの時間を測定することです。WebSocketの実装がHTTP/2よりも遅いのはなぜですか複数のファイルを転送する際のプッシュ? (Node.js/Go)

私の驚いたことに、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()) 
    } 
} 

ノード

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

HTTP/2プッシュやクライアント側の実装ではなく、関連するコードの1/3しか表示されていません(貼り付けられなかった結果を要約しましたが)。私たちはこれにどのように反応すると予想されますか? – Myst

+0

別の注記:HTTP/2プッシュでは、ブラウザ上でのHTTPキャッシュの利点と、すべての要求(新しい接続が開かれていない)で永続的なTCP/IP接続であるという利点があります。ページを更新するたびに開かれます。私はあなたの要求が何であるか分かりませんが、テストはHTTP/2に少し偏っているかもしれません(これらの速度は最初のクライアント/接続に関しては正しくありません)。 – Myst

答えて

0

https://github.com/gorilla/websocket/issues/228を参照してください。オペレーションは、HTTP/2プッシュでストリームを開く時間を測定していました。すべてのデータをストリームに転送する時間ではありませんでした。 OPはWebSocketがHTTP/2プッシュより高速であることを発見しました。

関連する問題