修复在连接读写优化模式下fastcgi无法正常工作的Bug

This commit is contained in:
GoEdgeLab
2023-03-06 10:33:54 +08:00
parent 39e020fe6b
commit 2ba63a85c1
6 changed files with 21 additions and 11 deletions

View File

@@ -105,7 +105,7 @@ func (this *ClientConn) Read(b []byte) (n int, err error) {
}
// 设置读超时时间
if this.isHTTP && !this.isWebsocket && !this.isShortReading && this.autoReadTimeout {
if this.isHTTP && !this.isPersistent && !this.isShortReading && this.autoReadTimeout {
this.setHTTPReadTimeout()
}
@@ -172,7 +172,7 @@ func (this *ClientConn) Write(b []byte) (n int, err error) {
}
// 延长读超时时间
if this.isHTTP && !this.isWebsocket && this.autoReadTimeout {
if this.isHTTP && !this.isPersistent && this.autoReadTimeout {
this.setHTTPReadTimeout()
}
@@ -238,7 +238,7 @@ func (this *ClientConn) SetDeadline(t time.Time) error {
func (this *ClientConn) SetReadDeadline(t time.Time) error {
// 如果开启了HTTP自动读超时选项则自动控制超时时间
if this.isHTTP && !this.isWebsocket && this.autoReadTimeout {
if this.isHTTP && !this.isPersistent && this.autoReadTimeout {
this.isShortReading = false
var unixTime = t.Unix()

View File

@@ -16,7 +16,7 @@ type BaseClientConn struct {
remoteAddr string
hasLimit bool
isWebsocket bool
isPersistent bool // 是否为持久化连接
isClosed bool
@@ -125,6 +125,6 @@ func (this *BaseClientConn) SetLinger(seconds int) error {
return nil
}
func (this *BaseClientConn) SetIsWebsocket(isWebsocket bool) {
this.isWebsocket = isWebsocket
func (this *BaseClientConn) SetIsPersistent(isPersistent bool) {
this.isPersistent = isPersistent
}

View File

@@ -24,6 +24,6 @@ type ClientConnInterface interface {
// UserId 获取当前连接所属服务的用户ID
UserId() int64
// SetIsWebsocket 设置是否为Websocket
SetIsWebsocket(isWebsocket bool)
// SetIsPersistent 设置是否为持久化
SetIsPersistent(isPersistent bool)
}

View File

@@ -56,14 +56,14 @@ func (this *ClientTLSConn) SetWriteDeadline(t time.Time) error {
return this.rawConn.SetWriteDeadline(t)
}
func (this *ClientTLSConn) SetIsWebsocket(isWebsocket bool) {
func (this *ClientTLSConn) SetIsPersistent(isPersistent bool) {
tlsConn, ok := this.rawConn.(*tls.Conn)
if ok {
var rawConn = tlsConn.NetConn()
if rawConn != nil {
clientConn, ok := rawConn.(*ClientConn)
if ok {
clientConn.SetIsWebsocket(isWebsocket)
clientConn.SetIsPersistent(isPersistent)
}
}
}

View File

@@ -73,6 +73,16 @@ func (this *HTTPRequest) doFastcgi() (shouldStop bool) {
}
}
// 设置为持久化连接
var requestConn = this.RawReq.Context().Value(HTTPConnContextKey)
if requestConn == nil {
return
}
requestClientConn, ok := requestConn.(ClientConnInterface)
if ok {
requestClientConn.SetIsPersistent(true)
}
// 连接池配置
poolSize := fastcgi.PoolSize
if poolSize <= 0 {

View File

@@ -111,7 +111,7 @@ func (this *HTTPRequest) doWebsocket(requestHost string, isLastRetry bool) (shou
requestClientConn, ok := requestConn.(ClientConnInterface)
if ok {
requestClientConn.SetIsWebsocket(true)
requestClientConn.SetIsPersistent(true)
}
clientConn, _, err := this.writer.Hijack()