重构连接监听与处理代码逻辑,连接信息存储于全局通过接口展示
This commit is contained in:
@@ -2,22 +2,24 @@ package fwd
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/google/uuid"
|
||||
"io"
|
||||
"log/slog"
|
||||
"net"
|
||||
"proxy-server/gateway/app"
|
||||
"proxy-server/gateway/debug"
|
||||
"proxy-server/gateway/env"
|
||||
"proxy-server/gateway/fwd/metrics"
|
||||
utils2 "proxy-server/utils"
|
||||
"proxy-server/utils"
|
||||
"strconv"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
func (s *Service) listenData() error {
|
||||
func ListenData(ctx context.Context) error {
|
||||
dataPort := env.AppDataPort
|
||||
|
||||
// 监听端口
|
||||
@@ -25,7 +27,7 @@ func (s *Service) listenData() error {
|
||||
if err != nil {
|
||||
return fmt.Errorf("监听数据通道失败: %w", err)
|
||||
}
|
||||
defer utils2.Close(ls)
|
||||
defer utils.Close(ls)
|
||||
|
||||
// 异步等待连接
|
||||
var connCh = make(chan net.Conn)
|
||||
@@ -42,8 +44,8 @@ func (s *Service) listenData() error {
|
||||
}
|
||||
select {
|
||||
case connCh <- conn:
|
||||
case <-s.ctx.Done():
|
||||
utils2.Close(conn)
|
||||
case <-ctx.Done():
|
||||
utils.Close(conn)
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -52,14 +54,14 @@ func (s *Service) listenData() error {
|
||||
// 处理连接
|
||||
for {
|
||||
select {
|
||||
case <-s.ctx.Done():
|
||||
case <-ctx.Done():
|
||||
return nil
|
||||
case conn := <-connCh:
|
||||
s.dataConnWg.Add(1)
|
||||
app.DataConnWg.Add(1)
|
||||
go func() {
|
||||
defer s.dataConnWg.Done()
|
||||
defer utils2.Close(conn)
|
||||
err := s.processDataConn(conn)
|
||||
defer app.DataConnWg.Done()
|
||||
defer utils.Close(conn)
|
||||
err := processDataConn(ctx, conn)
|
||||
if err != nil {
|
||||
slog.Error("处理数据通道连接失败", "err", err)
|
||||
}
|
||||
@@ -68,7 +70,7 @@ func (s *Service) listenData() error {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Service) processDataConn(client net.Conn) error {
|
||||
func processDataConn(ctx context.Context, client net.Conn) error {
|
||||
var reader = bufio.NewReader(client)
|
||||
|
||||
// 接收连接结果
|
||||
@@ -83,11 +85,11 @@ func (s *Service) processDataConn(client net.Conn) error {
|
||||
|
||||
// 加载用户连接
|
||||
var tagStr = uuid.UUID(tag).String()
|
||||
user, ok := s.userConnMap.LoadAndDelete(tagStr)
|
||||
user, ok := app.UserConnMap.LoadAndDelete(tagStr)
|
||||
if !ok {
|
||||
return fmt.Errorf("用户连接已关闭,tag:%s", tagStr)
|
||||
}
|
||||
defer utils2.Close(user)
|
||||
defer utils.Close(user)
|
||||
|
||||
// 检查状态
|
||||
if status != 1 {
|
||||
@@ -98,7 +100,7 @@ func (s *Service) processDataConn(client net.Conn) error {
|
||||
data := time.Now()
|
||||
|
||||
userPipeReader, userPipeWriter := io.Pipe()
|
||||
defer utils2.Close(userPipeWriter)
|
||||
defer utils.Close(userPipeWriter)
|
||||
|
||||
teeUser := io.TeeReader(user, userPipeWriter)
|
||||
go func() {
|
||||
@@ -127,10 +129,10 @@ func (s *Service) processDataConn(client net.Conn) error {
|
||||
|
||||
select {
|
||||
|
||||
case <-s.ctx.Done():
|
||||
case <-ctx.Done():
|
||||
return nil
|
||||
|
||||
case <-utils2.WgWait(&wg):
|
||||
case <-utils.WgWait(&wg):
|
||||
proxy := time.Now()
|
||||
|
||||
start, startOk := metrics.TimerStart.Load(user.Conn)
|
||||
|
||||
Reference in New Issue
Block a user