17. (*http.Server).Serve() の挙動
for {
// 中略
if cc := srv.ConnContext; cc != nil {
connCtx = cc(connCtx, rw)
if connCtx == nil {
panic("ConnContext returned nil")
}
}
tempDelay = 0
c := srv.newConn(rw)
c.setState(c.rwc, StateNew, runHooks) // before Serve can return
go c.serve(connCtx)
}
参考: https://github.com/golang/go/blob/master/src/net/http/server.go
17
18. (*http.Server).Serve() の挙動
for {
// 中略
if cc := srv.ConnContext; cc != nil {
connCtx = cc(connCtx, rw)
if connCtx == nil {
panic("ConnContext returned nil")
}
}
tempDelay = 0
c := srv.newConn(rw)
c.setState(c.rwc, StateNew, runHooks) // before Serve can return
go c.serve(connCtx)
}
18
参考: https://github.com/golang/go/blob/master/src/net/http/server.go
19. (*http.Server).Serve() の挙動
for {
// 中略
if cc := srv.ConnContext; cc != nil {
connCtx = cc(connCtx, rw)
if connCtx == nil {
panic("ConnContext returned nil")
}
}
tempDelay = 0
c := srv.newConn(rw)
c.setState(c.rwc, StateNew, runHooks) // before Serve can return
go c.serve(connCtx)
}
1 リクエスト毎にgoroutineを起動してそう
19
参考: https://github.com/golang/go/blob/master/src/net/http/server.go