Fix the problem of long connection for more than 30 seconds and disconnection of the server

This commit is contained in:
itcode 2018-08-08 10:52:08 +08:00
parent 629f2856b1
commit 9bb08396c7
4 changed files with 19 additions and 1 deletions

View File

@ -60,6 +60,7 @@ var (
allowPorts string allowPorts string
maxPoolCount int64 maxPoolCount int64
maxPortsPerClient int64 maxPortsPerClient int64
vhostHttpTimeout int64
) )
func init() { func init() {
@ -85,6 +86,7 @@ func init() {
rootCmd.PersistentFlags().Int64VarP(&authTimeout, "auth_timeout", "", 900, "auth timeout") rootCmd.PersistentFlags().Int64VarP(&authTimeout, "auth_timeout", "", 900, "auth timeout")
rootCmd.PersistentFlags().StringVarP(&subDomainHost, "subdomain_host", "", "", "subdomain host") rootCmd.PersistentFlags().StringVarP(&subDomainHost, "subdomain_host", "", "", "subdomain host")
rootCmd.PersistentFlags().Int64VarP(&maxPortsPerClient, "max_ports_per_client", "", 0, "max ports per client") rootCmd.PersistentFlags().Int64VarP(&maxPortsPerClient, "max_ports_per_client", "", 0, "max ports per client")
rootCmd.PersistentFlags().Int64VarP(&vhostHttpTimeout, "vhost_http_timeout", "", 30, "vhost http timeout")
} }
var rootCmd = &cobra.Command{ var rootCmd = &cobra.Command{
@ -177,6 +179,7 @@ func parseServerCommonCfgFromCmd() (err error) {
g.GlbServerCfg.AuthTimeout = authTimeout g.GlbServerCfg.AuthTimeout = authTimeout
g.GlbServerCfg.SubDomainHost = subDomainHost g.GlbServerCfg.SubDomainHost = subDomainHost
g.GlbServerCfg.MaxPortsPerClient = maxPortsPerClient g.GlbServerCfg.MaxPortsPerClient = maxPortsPerClient
g.GlbServerCfg.VhostHttpTimeout = vhostHttpTimeout
return return
} }

View File

@ -66,3 +66,6 @@ subdomain_host = frps.com
# if tcp stream multiplexing is used, default is true # if tcp stream multiplexing is used, default is true
tcp_mux = true tcp_mux = true
# if long connection for more than 30 seconds and disconnection of the server ,fix the pars .
vhost_http_timeout = 30

View File

@ -73,6 +73,7 @@ type ServerCommonConf struct {
MaxPortsPerClient int64 `json:"max_ports_per_client"` MaxPortsPerClient int64 `json:"max_ports_per_client"`
HeartBeatTimeout int64 `json:"heart_beat_timeout"` HeartBeatTimeout int64 `json:"heart_beat_timeout"`
UserConnTimeout int64 `json:"user_conn_timeout"` UserConnTimeout int64 `json:"user_conn_timeout"`
VhostHttpTimeout int64 `json:"vhost_http_timeout "`
} }
func GetDefaultServerConf() *ServerCommonConf { func GetDefaultServerConf() *ServerCommonConf {
@ -102,6 +103,7 @@ func GetDefaultServerConf() *ServerCommonConf {
MaxPortsPerClient: 0, MaxPortsPerClient: 0,
HeartBeatTimeout: 90, HeartBeatTimeout: 90,
UserConnTimeout: 10, UserConnTimeout: 10,
VhostHttpTimeout: 30,
} }
} }
@ -300,6 +302,15 @@ func UnmarshalServerConfFromIni(defaultCfg *ServerCommonConf, content string) (c
cfg.HeartBeatTimeout = v cfg.HeartBeatTimeout = v
} }
} }
if tmpStr, ok = conf.Get("common", "vhost_http_timeout"); ok {
v, errRet := strconv.ParseInt(tmpStr, 10, 64)
if errRet != nil {
err = fmt.Errorf("Parse conf error: vhost_http_timeout is incorrect")
return
} else {
cfg.VhostHttpTimeout = v
}
}
return return
} }

View File

@ -25,13 +25,14 @@ import (
"sync" "sync"
"time" "time"
"github.com/fatedier/frp/g"
frpLog "github.com/fatedier/frp/utils/log" frpLog "github.com/fatedier/frp/utils/log"
"github.com/fatedier/golib/pool" "github.com/fatedier/golib/pool"
) )
var ( var (
responseHeaderTimeout = time.Duration(30) * time.Second responseHeaderTimeout = time.Duration(g.GlbServerCfg.VhostHttpTimeout) * time.Second
ErrRouterConfigConflict = errors.New("router config conflict") ErrRouterConfigConflict = errors.New("router config conflict")
ErrNoDomain = errors.New("no such domain") ErrNoDomain = errors.New("no such domain")