mirror of
https://github.com/gin-gonic/gin.git
synced 2025-10-21 16:58:08 +08:00
Support http.Server customization
This commit is contained in:
parent
502c898d75
commit
085c04a2a3
26
gin.go
26
gin.go
@ -107,6 +107,9 @@ type Engine struct {
|
|||||||
noMethod HandlersChain
|
noMethod HandlersChain
|
||||||
pool sync.Pool
|
pool sync.Pool
|
||||||
trees methodTrees
|
trees methodTrees
|
||||||
|
|
||||||
|
// Use http.Server under the hood
|
||||||
|
server *http.Server
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ IRouter = &Engine{}
|
var _ IRouter = &Engine{}
|
||||||
@ -139,6 +142,7 @@ func New() *Engine {
|
|||||||
trees: make(methodTrees, 0, 9),
|
trees: make(methodTrees, 0, 9),
|
||||||
delims: render.Delims{Left: "{{", Right: "}}"},
|
delims: render.Delims{Left: "{{", Right: "}}"},
|
||||||
secureJsonPrefix: "while(1);",
|
secureJsonPrefix: "while(1);",
|
||||||
|
server: &http.Server{},
|
||||||
}
|
}
|
||||||
engine.RouterGroup.engine = engine
|
engine.RouterGroup.engine = engine
|
||||||
engine.pool.New = func() interface{} {
|
engine.pool.New = func() interface{} {
|
||||||
@ -292,7 +296,9 @@ func (engine *Engine) Run(addr ...string) (err error) {
|
|||||||
|
|
||||||
address := resolveAddress(addr)
|
address := resolveAddress(addr)
|
||||||
debugPrint("Listening and serving HTTP on %s\n", address)
|
debugPrint("Listening and serving HTTP on %s\n", address)
|
||||||
err = http.ListenAndServe(address, engine)
|
engine.server.Addr = address
|
||||||
|
engine.server.Handler = engine
|
||||||
|
err = engine.server.ListenAndServe()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,7 +309,9 @@ func (engine *Engine) RunTLS(addr, certFile, keyFile string) (err error) {
|
|||||||
debugPrint("Listening and serving HTTPS on %s\n", addr)
|
debugPrint("Listening and serving HTTPS on %s\n", addr)
|
||||||
defer func() { debugPrintError(err) }()
|
defer func() { debugPrintError(err) }()
|
||||||
|
|
||||||
err = http.ListenAndServeTLS(addr, certFile, keyFile, engine)
|
engine.server.Addr = addr
|
||||||
|
engine.server.Handler = engine
|
||||||
|
err = engine.server.ListenAndServeTLS(certFile, keyFile)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -321,7 +329,9 @@ func (engine *Engine) RunUnix(file string) (err error) {
|
|||||||
}
|
}
|
||||||
defer listener.Close()
|
defer listener.Close()
|
||||||
os.Chmod(file, 0777)
|
os.Chmod(file, 0777)
|
||||||
err = http.Serve(listener, engine)
|
|
||||||
|
engine.server.Handler = engine
|
||||||
|
err = engine.server.Serve(listener)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -338,7 +348,8 @@ func (engine *Engine) RunFd(fd int) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer listener.Close()
|
defer listener.Close()
|
||||||
err = http.Serve(listener, engine)
|
engine.server.Handler = engine
|
||||||
|
err = engine.server.Serve(listener)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -354,6 +365,13 @@ func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
|||||||
engine.pool.Put(c)
|
engine.pool.Put(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetServer customize the http.Server under the hood.
|
||||||
|
func (engine *Engine) SetServer(server *http.Server) {
|
||||||
|
if server != nil {
|
||||||
|
engine.server = server
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// HandleContext re-enter a context that has been rewritten.
|
// HandleContext re-enter a context that has been rewritten.
|
||||||
// This can be done by setting c.Request.URL.Path to your new target.
|
// This can be done by setting c.Request.URL.Path to your new target.
|
||||||
// Disclaimer: You can loop yourself to death with this, use wisely.
|
// Disclaimer: You can loop yourself to death with this, use wisely.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user