wangkaiyue 10 месяцев назад
Родитель
Сommit
cc090b4859

+ 20 - 18
core/proxy/broker/outServer/SussBi.go

@@ -11,6 +11,7 @@ import (
 	"net/url"
 	"regexp"
 	"strings"
+	"sync"
 	"time"
 
 	"app.yhyue.com/moapp/jybase/common"
@@ -27,6 +28,8 @@ type sussBi struct {
 	pwd            string
 	Url            *url.URL
 	cookiePath     string
+	lastLogin      time.Time
+	loginLock      *sync.RWMutex
 	jar            *cookiejar.Jar
 	succbiJar      *cookiejar.Jar
 	prm            *ParamReplaceManager
@@ -118,6 +121,8 @@ func InitSussBi(config map[string]interface{}) (*sussBi, error) {
 		loginAddr:      loginAddr,
 		cookiePath:     cookiePath,
 		jar:            sussCookie,
+		lastLogin:      time.Now(),
+		loginLock:      &sync.RWMutex{},
 		succbiJar:      sussCookie2,
 		prm:            prManager,
 		singlePointUrl: regexp.MustCompile(gconv.String(config["singlePointUrl"])),
@@ -126,25 +131,22 @@ func InitSussBi(config map[string]interface{}) (*sussBi, error) {
 
 // AutoLogin 自动登录
 func (s *sussBi) AutoLogin() error {
-	client := &http.Client{
-		Jar: s.succbiJar,
-	}
-	resp, err := client.Get(fmt.Sprintf("%s/succbi/?:user=%s&:password=%s", s.addr, s.user, s.pwd))
-	if err != nil {
-		return err
-	}
-	if !(resp.StatusCode == 302 || resp.StatusCode == 200) {
-		return fmt.Errorf("自动登录异常")
+	s.loginLock.Lock()
+	defer s.loginLock.Unlock()
+	if time.Now().Sub(s.lastLogin).Seconds() > 60 {
+		client := &http.Client{
+			Jar: s.succbiJar,
+		}
+		resp, err := client.Get(fmt.Sprintf("%s/succbi/?:user=%s&:password=%s", s.addr, s.user, s.pwd))
+		if err != nil {
+			return err
+		}
+		if !(resp.StatusCode == 302 || resp.StatusCode == 200) {
+			return fmt.Errorf("自动登录异常")
+		}
+		s.succbiJar = s.jar
+		s.lastLogin = time.Now()
 	}
-	s.succbiJar = s.jar
-	// client.Jar = s.succbiJar
-	// resp, err = client.Get(fmt.Sprintf("%s/succbi/?:user=%s&:password=%s", s.addr, s.user, s.pwd))
-	// if err != nil {
-	// 	return err
-	// }
-	// if !(resp.StatusCode == 302 || resp.StatusCode == 200) {
-	// 	return fmt.Errorf("自动登录异常")
-	// }
 	return nil
 }
 

+ 1 - 0
core/proxy/proxyClient/proxyClient.go

@@ -41,5 +41,6 @@ func ReLoadClient() {
 		TLSHandshakeTimeout:   time.Duration(gcfg.Instance().MustGet(gctx.New(), "proxy.tLSHandshakeTimeout", 1).Int()) * time.Second,   //tls握手超时时间
 		ExpectContinueTimeout: time.Duration(gcfg.Instance().MustGet(gctx.New(), "proxy.expectContinueTimeout", 1).Int()) * time.Second, //100-continue 超时时间
 		MaxIdleConnsPerHost:   gcfg.Instance().MustGet(gctx.New(), "proxy.maxIdleConnsPerHost", 5).Int(),                                //客户端可以持有的最大空闲连接
+		DisableKeepAlives:     gcfg.Instance().MustGet(gctx.New(), "proxy.disableKeepAlives", false).Bool(),
 	}
 }

+ 6 - 2
core/proxy/proxyServer.go

@@ -4,6 +4,7 @@ import (
 	"fmt"
 	"net/http"
 	"net/url"
+	"time"
 
 	log "app.yhyue.com/moapp/jylog"
 	. "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
@@ -23,7 +24,7 @@ import (
 
 var routerManager *router.Manager
 
-const errTryTime = 10 //错误尝试
+const errTryTime = 3 //错误尝试
 
 // InitGateWayServer 初始化网关服务
 func InitGateWayServer(initCtx gctx.Ctx) *ghttp.Server {
@@ -121,9 +122,11 @@ var proxyHandler = func(r *ghttp.Request) {
 		proxyClient.CreateCustomProxyClient(proxyAddr, errHandel, changeFunc).ServeHTTP(r.Response.ResponseWriter, r.Request)
 
 		if gCtx.RouterRule.IsOutServer { //检测外部服务登录状态是否过期
-			if vars.BManager.CheckOutSeverLoginOut(gCtx.RouterRule.MiddleCode, r) || hasErr {
+			if hasErr || vars.BManager.CheckOutSeverLoginOut(gCtx.RouterRule.MiddleCode, r) {
 				if err := vars.BManager.OutSeverLoginIn(gCtx.RouterRule.MiddleCode); err != nil {
 					log.WithContext(r.GetCtx()).Errorf("%s 外部服务自动登录异常 %v \n", gCtx.RouterRule.MiddleCode, err)
+				} else {
+					log.WithContext(r.GetCtx()).Errorf("%s 外部服务自动登录成功 \n", gCtx.RouterRule.MiddleCode)
 				}
 			}
 		}
@@ -132,5 +135,6 @@ var proxyHandler = func(r *ghttp.Request) {
 		if !hasErr {
 			return
 		}
+		time.Sleep(time.Millisecond * 500)
 	}
 }