package utils import ( "bufio" "context" "encoding/json" "fmt" "github.com/qit-team/snow-core/redis" "net" "sync/atomic" "time" ) var ( workNum int32 = 0 workSingleNum = &workNum maxNum = 2000 handNum int32 = 0 handSingleNum = &handNum busy int32 = 0 busySingle = &busy ) func handLogacal(conn net.Conn, data []byte) { conn.Write([]byte("2\n")) time.Sleep(1 * time.Second) atomic.AddInt32(workSingleNum, -1) atomic.AddInt32(handSingleNum, 1) atomic.StoreInt32(busySingle, 0) fmt.Println(*handSingleNum, "处理条数") fmt.Println(string(data), "消息") } func handleConnection(conn net.Conn) { for { buf := make([]byte, 1024) reader := bufio.NewReader(conn) line, err := reader.ReadString('\n') if err != nil { fmt.Println("Error reading from connection:", err) return } // 将读取到的字符串转换为字节切片 buf = []byte(line) if err == nil && len(buf) > 2 { var data map[string]interface{} json.Unmarshal(buf, &data) redis.GetRedis().HDel(context.Background(), "kafka_message", data["serial_number"].(string)).Result() if atomic.LoadInt32(workSingleNum) >= int32(maxNum) { if atomic.LoadInt32(busySingle) == 0 { fmt.Println("繁忙") atomic.StoreInt32(busySingle, 1) conn.Write([]byte("5\n")) continue } } else { fmt.Println("收到", *workSingleNum, maxNum, string(buf)) conn.Write([]byte(data["serial_number"].(string) + "\n")) fmt.Println(data["serial_number"].(string), "ggggggggggggg") go handLogacal(conn, buf) atomic.AddInt32(workSingleNum, 1) conn.Write([]byte("2\n")) } } else { conn.Write([]byte("6\n")) } } } func StartTcpServer() { listener, err := net.Listen("tcp", ":8080") if err != nil { fmt.Println("Error starting server:", err) return } defer listener.Close() for { conn, err := listener.Accept() if err != nil { fmt.Println("Error accepting connection:", err) continue } go handleConnection(conn) } }