Golang 高性能UDP Server实现
通过Goroutine实现UDP消息并发处理
package main import ( "net" "fmt" "os" ) // 限制goroutine数量 var limitChan = make(chan bool, 1000) // UDP goroutine 实现并发读取UDP数据 func udpProcess(conn *net.UDPConn) { // 最大读取数据大小 data := make([]byte, 1024) n, _, err := conn.ReadFromUDP(data) if err != nil { fmt.Println("failed read udp msg, error: " + err.Error()) } str := string(data[:n]) fmt.Println("receive from client, data:" + str) <- limitChan } func udpServer(address string) { udpAddr, err := net.ResolveUDPAddr("udp", address) conn, err := net.ListenUDP("udp", udpAddr) defer conn.Close() if err != nil { fmt.Println("read from connect failed, err:" + err.Error()) os.Exit(1) } for { limitChan <- true go udpProcess(conn) } } func main() { address := "0.0.0.0:8080" udpServer(address) }