package main
import ( "fmt" "net" "log" "os" )
const MAX_MTU int = 1024 * 64 func main() { // 创建监听 file, err := os.Create("/data/flume-agent/log/go_udp.log") if err != nil { log.Fatalln("fail to create go_udp.log file!") } logger := log.New(file, "", log.LstdFlags|log.Llongfile) logger.Println("started udp server") socket, err := net.ListenUDP("udp4", &net.UDPAddr{ IP: net.IPv4(0, 0, 0, 0), Port: 5122, }) if err != nil { logger.Println("监听失败!", err) return } defer socket.Close()
for {
// 读取数据
data := make([]byte, MAX_MTU)
_, remoteAddr, err := socket.ReadFromUDP(data)
if err != nil {
fmt.Println("读取数据失败!", err)
continue
}
fmt.Printf("%s %s\n",remoteAddr.IP,data)
// 发送数据
/*
senddata := []byte("receive success!")
_, err = socket.WriteToUDP(senddata, remoteAddr)
if err != nil {
logger.Println("发送数据失败!", err)
return
}
*/
}
}
以上代码测试一下似乎是同步的,压测效率低的可怜,而且数据丢失严重 对go的一些web框架都是多线程异步高并发,请问udp这里如何实现?