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呢?