2017-08-07 32 views
1

場景
我使用golang創建了一個簡單的視頻流。首先,我使用​​來爲我的視頻提供服務。它一直工作,直到我同時連接4個選項卡到我的服務器,但前兩個只能工作,其餘的都不加載。我可以在播放兩個視頻的同時導航到菜單,但我無法播放其他視頻。我也嘗試過使用多個設備。只有兩個連接可以傳輸。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_運行的任何內容。我在Windows 10 64位上運行。有任何想法嗎? – dovahkiin

+0

打開IIS以查找類似設置 – evanmcdonnal

回答

1

我懷疑你的代碼是好的。所有主流瀏覽器通常會限制並行主機連接的數量。

作爲一個簡單的測試,嘗試使用類似curl的多次流式傳輸來確認實際上存在代碼問題。或者,嘗試同時運行不同的瀏覽器(例如Chrome中的2個標籤,Firefox中的2個標籤等)

+0

我首先在Chrome上試過2個標籤,它的工作正常,但它沒有在Firefox上(雖然Chome是開放的)。雖然這些是開放的,但我沒有收到任何東西。 – dovahkiin

+0

您的代碼在我的系統上正常工作。我可以有4個併發連接,所有服務內容沒有問題。正如我所說,你的代碼是好的。系統上顯然存在環境/配置問題。你爲什麼不嘗試從Digital Ocean/Vultr之類的人那裏購買便宜的VPS? –