- 增加到期时间限制
 - 新增配置面板 https 访问后,http 自动跳转 https(同端口)
 - 降低获取系统连接数的 cpu 使用率
 - 优化界面
 - VMess 协议 alterId 默认改为 0
 - 修复旧版本 iOS 系统白屏问题
 - 修复重启面板后 xray 没有启动的问题
This commit is contained in:
sprov
2021-07-26 13:29:29 +08:00
parent f1057b1142
commit 292d5b89d4
22 changed files with 474 additions and 147 deletions

View File

@@ -24,6 +24,8 @@ import (
"x-ui/logger"
"x-ui/util/common"
"x-ui/web/controller"
"x-ui/web/job"
"x-ui/web/network"
"x-ui/web/service"
)
@@ -277,53 +279,21 @@ func (s *Server) initI18n(engine *gin.Engine) error {
}
func (s *Server) startTask() {
err := s.xrayService.RestartXray()
err := s.xrayService.RestartXray(true)
if err != nil {
logger.Warning("start xray failed:", err)
}
var checkTime = 0
// 每 30 秒检查一次 xray 是否在运行
s.cron.AddFunc("@every 30s", func() {
if s.xrayService.IsXrayRunning() {
checkTime = 0
return
}
checkTime++
if checkTime < 2 {
return
}
s.xrayService.SetToNeedRestart()
})
s.cron.AddJob("@every 30s", job.NewCheckXrayRunningJob())
go func() {
time.Sleep(time.Second * 5)
// 每 10 秒统计一次流量,首次启动延迟 5 秒,与重启 xray 的时间错开
s.cron.AddFunc("@every 10s", func() {
if !s.xrayService.IsXrayRunning() {
return
}
traffics, err := s.xrayService.GetXrayTraffic()
if err != nil {
logger.Warning("get xray traffic failed:", err)
return
}
err = s.inboundService.AddTraffic(traffics)
if err != nil {
logger.Warning("add traffic failed:", err)
}
})
s.cron.AddJob("@every 10s", job.NewXrayTrafficJob())
}()
// 每 30 秒检查一次 inbound 流量超出情况
s.cron.AddFunc("@every 30s", func() {
count, err := s.inboundService.DisableInvalidInbounds()
if err != nil {
logger.Warning("disable invalid inbounds err:", err)
} else if count > 0 {
logger.Debugf("disabled %v inbounds", count)
s.xrayService.SetToNeedRestart()
}
})
// 每 30 秒检查一次 inbound 流量超出和到期的情况
s.cron.AddJob("@every 30s", job.NewCheckInboundJob())
}
func (s *Server) Start() (err error) {
@@ -362,22 +332,21 @@ func (s *Server) Start() (err error) {
return err
}
listenAddr := net.JoinHostPort(listen, strconv.Itoa(port))
var listener net.Listener
listener, err := net.Listen("tcp", listenAddr)
if err != nil {
return err
}
if certFile != "" || keyFile != "" {
var cert tls.Certificate
cert, err = tls.LoadX509KeyPair(certFile, keyFile)
cert, err := tls.LoadX509KeyPair(certFile, keyFile)
if err != nil {
listener.Close()
return err
}
c := &tls.Config{
Certificates: []tls.Certificate{cert},
}
listener, err = tls.Listen("tcp", listenAddr, c)
} else {
listener, err = net.Listen("tcp", listenAddr)
}
if err != nil {
return err
listener = network.NewAutoHttpsListener(listener)
listener = tls.NewListener(listener, c)
}
if certFile != "" || keyFile != "" {
logger.Info("web server run https on", listener.Addr())
@@ -392,7 +361,9 @@ func (s *Server) Start() (err error) {
Handler: engine,
}
go s.httpServer.Serve(listener)
go func() {
s.httpServer.Serve(listener)
}()
return nil
}