我在 golang 中创建了一个文件服务器,并在 Listener 上调用了 Close() 方法。当我尝试在新的 Web 连接上访问端口时,似乎 Socket 已关闭,我无法访问该网站。如果我使用已经建立的连接来引用页面......页面重新加载很好,就好像套接字从未关闭过一样?我什至仍然可以浏览文件系统。大约 30 分钟后,我注意到套接字似乎强制关闭。我是否缺少强制套接字删除所有现有连接以防止人们访问文件服务器的东西?var fileListener net.Listenerhost_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()
1 回答

万千封印
TA贡献1891条经验 获得超3个赞
没有办法关闭空闲的 HTTP/1.1 或 HTTP2 连接。https://golang.org/issue/9478上有一个未解决的问题,但没有立即计划。注意一旦你关闭了你的监听器,你的服务器将不会接受新的连接;您正在重用相同的连接。
如果您想强制关闭所有连接,您需要自己进行簿记,使用跟踪活动的 TCP 连接。http.Server
ConnState
您还可以Connection: close
在每个响应上设置处理程序,但是如果客户端需要发出超过 1 个请求,这会使您的 http 服务器效率大大降低。
- 1 回答
- 0 关注
- 211 浏览
添加回答
举报
0/150
提交
取消