使用 golang 创建多个 UDP 服务器
Create multiple UDP servers using golang
我有创建 UDP 服务器所需的端口列表。我试过这个方法
for _, r := range routingTable.Routes {
if r.Metric == 0 {
wg.Add(1)
go func() {
conn, err := net.ListenUDP("udp4", &r.OriginPort)
if err != nil {
log.Fatalf("Error occured starting the server: %s", err)
} else {
log.Printf("Listening on port: %s", r.OriginPort.String())
}
defer conn.Close()
buffer := make([]byte, 1024)
for {
conn.ReadFromUDP(buffer)
}
}()
wg.Wait()
}
}
但它不起作用。我该怎么做才能让它发挥作用?
- 如@CeriseLimon 所述:不要在每次迭代时都创建 goroutine 块,将
wg.Wait()
移出循环
- 不要忘记从每个 goroutine 中调用
wg.Done()
:在每个函数中添加对 defer wg.Done()
的调用
(因为你的监听 goroutines 从来没有 return,第二点有点理论化......显然,添加一些代码让你的监听 goroutines 做一些事情,如果可能的话干净地退出)
我有创建 UDP 服务器所需的端口列表。我试过这个方法
for _, r := range routingTable.Routes {
if r.Metric == 0 {
wg.Add(1)
go func() {
conn, err := net.ListenUDP("udp4", &r.OriginPort)
if err != nil {
log.Fatalf("Error occured starting the server: %s", err)
} else {
log.Printf("Listening on port: %s", r.OriginPort.String())
}
defer conn.Close()
buffer := make([]byte, 1024)
for {
conn.ReadFromUDP(buffer)
}
}()
wg.Wait()
}
}
但它不起作用。我该怎么做才能让它发挥作用?
- 如@CeriseLimon 所述:不要在每次迭代时都创建 goroutine 块,将
wg.Wait()
移出循环 - 不要忘记从每个 goroutine 中调用
wg.Done()
:在每个函数中添加对defer wg.Done()
的调用
(因为你的监听 goroutines 从来没有 return,第二点有点理论化......显然,添加一些代码让你的监听 goroutines 做一些事情,如果可能的话干净地退出)