我需要http.Server在我自己的服务器结构中嵌入默认值并自定义Serve方法。
服务器需要将go c.serve()呼叫短路,并且只有当它有可用的计算资源在 50 毫秒内响应时才运行该线路。否则服务器只会发送 204 并继续。
这几乎是直截了当的。
type PragmaticServer struct {
http.Server
Addr string
Handler http.Handler
}
func (srv *PragmaticServer) Serve(l net.Listener) error {
defer l.Close()
var tempDelay time.Duration // how long to sleep on accept failure
for {
// SNIP for clarity
c, err := srv.newConn(rw)
if err != nil {
continue
}
c.setState(c.rwc, StateNew) // before Serve can return
go c.serve()
}
}
所以,再说一遍。这几乎有效。除了这srv.newConn是一个未导出的方法,就像c.serveand 一样c.setState,这意味着我最终不得不复制和粘贴几乎全部内容net/http才能编译。这基本上是一个叉子。有没有更好的方法来做到这一点?
ibeautiful
相关分类