Go http.ServeFile和http.ServeContent无法处理多个客户端

Go http.ServeFile和http.ServeContent无法处理多个客户端,go,stream,Go,Stream,场景 我用golang创建了一个简单的视频流。起初,我使用http.ServeContent为我的视频提供服务。它一直在工作,直到我同时将4个选项卡连接到我的服务器,但前两个选项卡只起作用,其余的根本不加载。在播放这两个视频时,我可以导航到菜单,但在其他视频上我无法播放。我还尝试了使用多种设备。只有两个连接可以流式传输 因此,我将http.ServeContent更改为http.ServeFile,但它仍然是一样的,但当我使用io.Pipes时,它服务于每个请求,但问题是它无法查找 这是我的密码

场景
我用golang创建了一个简单的视频流。起初,我使用
http.ServeContent
为我的视频提供服务。它一直在工作,直到我同时将4个选项卡连接到我的服务器,但前两个选项卡只起作用,其余的根本不加载。在播放这两个视频时,我可以导航到菜单,但在其他视频上我无法播放。我还尝试了使用多种设备。只有两个连接可以流式传输

因此,我将
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)
    }
}

我希望你能帮忙。谢谢。

我怀疑您的代码没有问题。所有主要浏览器通常都会限制到主机的并行活动连接数


作为一个简单的测试,尝试使用类似于
curl
的方法多次流式处理,以确认您的代码确实存在问题。或者,尝试同时运行不同的浏览器(例如,Chrome中有2个选项卡,Firefox中有2个选项卡等)

服务器配置级别可能存在问题,限制了活动连接。仅供参考,我不希望Go代码会这样做,所以我会检查您的apache配置或类似的内容。我没有运行类似apache或nginx的任何东西。我运行的是64位Windows 10。有什么想法吗?打开IIS找到类似的设置代码中有哪些挂起的请求被阻止了?@JimB它在
http.ServeFile
中被阻止了,我先在Chrome上尝试了两个选项卡,它工作正常,但在Firefox上没有(Chome是打开的)。当它们打开时,我尝试了curl,但没有收到任何消息。您的代码在我的系统上运行良好。我可以有4个并发连接,所有连接都提供内容,没有问题。正如我所说,你的代码很好。显然,您的系统中存在环境/配置问题。你为什么不试着使用像Digital Ocean/Vultr这样的人提供的廉价VPS呢?