2017-08-07 13 views
1

シナリオ
golangを使用して簡単なビデオストリーマを作成しました。まず、​​を使って自分の動画を配信しました。私はが同時にの4つのタブを私のサーバに接続するまで動作していましたが、最初の2つは動作し、残りは全くロードされません。私は2つのビデオをストリーミング中にメニューに移動できますが、残りの部分はストリーミングできません。私も複数のデバイスを使って試しました。接続できるのは2つの接続だけです。http.ServeFileとhttp.ServeContentは複数のクライアントを処理できません

だから、私はhttp.ServeFileが、そのまだ同じに​​を変えたが、私はio.Pipesを使用する場合、それはすべての要求を務めたが、問題はそれを求めることができないということです。私はあなたが役立つことがしたい

package main 

import (
    "log" 
    "net" 
    "net/http" 

    "github.com/gorilla/mux" 
) 

func serveVideo(w http.ResponseWriter, r *http.Request) { 
    vars := mux.Vars(r) 
    title := vars["title"] 
    ep := vars["ep"] 
    http.ServeFile(w, r, "video/" + title + "/" ep + ".mp4") 
} 

func main() { 
    const port string = "8080" 
    // Create mux router 
    r := mux.NewRouter() 
    r.HandleFunc("/video/{title}/{ep}", serveVideo) 
    // let mux handle 
    http.Handle("/", r) 
    if err := http.ListenAndServe(":8080", nil); err != nil { 
     log.Fatal(err) 
    } 
} 

は、ここに私のコードです。ありがとうございました。

+0

アクティブな接続を制限するサーバー設定レベルに問題がある可能性があります。ちょうどfyi、私はGoのコードがこれを行うことを期待していないので、私はあなたのApacheの設定やそれらの行に沿って何かをチェックするだろう。 – evanmcdonnal

+0

私は_apache_または_nginx_ runningのようなものは持っていません。私はWindows 10 64ビットで動作しています。何か案は? – dovahkiin

+0

IISを開いて同様の設定を見つけよう – evanmcdonnal

答えて

1

あなたのコードは問題ないと思います。主要なブラウザーはすべて、通常、ホストへの並列アクティブ接続の数を制限します。

簡単なテストとして、curlのようなもので複数回ストリーミングして、実際にコードに問題があることを確認してください。または、別のブラウザを同時に実行することもできます(Chromeの2つのタブ、Firefoxの2つのタブなど)

+0

私は最初にChrome上で2つのタブを試してみましたが、期待通りに動作していましたが、Firefoxでは開けませんでした。それらは開いている間、私はカールを試みたが、私は何も受け取っていない。 – dovahkiin

+0

あなたのコードは私のシステムで正常に動作します。私は4つの同時接続を持つことができ、問題なくコンテンツを提供します。私が言ったように、あなたのコードは大丈夫です。システムのどこかに明らかに環境/構成上の問題があります。あなたはDigital Ocean/Vultrのような人から安いVPSで走ってみませんか? –

関連する問題