Golang 在关闭后保持文件服务套接字打开

我在 golang 中创建了一个文件服务器,并在 Listener 上调用了 Close() 方法。


当我尝试在新的 Web 连接上访问端口时,似乎 Socket 已关闭,我无法访问该网站。


如果我使用已经建立的连接来引用页面......页面重新加载很好,就好像套接字从未关闭过一样?我什至仍然可以浏览文件系统。


大约 30 分钟后,我注意到套接字似乎强制关闭。


我是否缺少强制套接字删除所有现有连接以防止人们访问文件服务器的东西?


var fileListener net.Listener

host_string = "127.0.0.1:8080"

fileListener, _ = net.Listen("tcp", host_string)

server := &http.Server{Addr: host_string, Handler:     

http.FileServer(http.Dir("/"))}

go func() { server.Serve(fileListener) }()

fileListener.Close()


守着一只汪
浏览 212回答 1
1回答

万千封印

没有办法关闭空闲的 HTTP/1.1 或 HTTP2 连接。https://golang.org/issue/9478上有一个未解决的问题,但没有立即计划。注意一旦你关闭了你的监听器,你的服务器将不会接受新的连接;您正在重用相同的连接。如果您想强制关闭所有连接,您需要自己进行簿记,使用跟踪活动的 TCP 连接。http.Server ConnState您还可以Connection: close在每个响应上设置处理程序,但是如果客户端需要发出超过 1 个请求,这会使您的 http 服务器效率大大降低。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go