为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
守着一只汪 2022-01-17 20:10:07
我在 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 服务器效率大大降低。


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号