登录
首页 >  Golang >  Go问答

使用golang编写多个UDP服务器

来源:stackoverflow

时间:2024-02-21 09:57:18 245浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《使用golang编写多个UDP服务器》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

我有创建 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()
        }
    }

但它不起作用。我该怎么做才能让它发挥作用?


正确答案


  1. 正如 @CeriseLimon 所指出的:不要在每次迭代中创建 goroutine 块,将 wg.Wait() 移到循环之外
  2. 不要忘记在每个 goroutine 中调用 wg.Done() :在每个函数中添加对 defer wg.Done() 的调用

(因为你的监听 goroutine 永远不会返回,所以第二点有点理论化......显然,添加一些代码让你的监听 goroutine 做一些事情,如果可能的话干净地退出)

今天关于《使用golang编写多个UDP服务器》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>