我们可以使用select to接受()在GO中的不同侦听器中



就像以下代码一样:

for {
    select {
    case conn, err := listener1.Accept():
        if err != nil {
            log.Fatal(err)
        }
        go handleConn1(conn)
    case conn, err := listener2.Accept():
        if err != nil {
            log.Fatal(err)
        }
        go handleConn1(conn)
    }
}

虽然编辑告诉我select

有问题

我们可以在 go >?

中实现类似的东西

select仅与频道一起使用(请参阅此处:https://gobyexample.com/select)

在您的情况下,您可以跨越两个goroutines,以便它们每个人都等待一个侦听器的Accept并处理连接:

go func() {
    for {
        conn, err := listener1.Accept():
        if err != nil {
            log.Fatal(err)
        }
        handleConn1(conn)
    }
}()
go func () {
    for {
        conn, err := listener2.Accept():
        if err != nil {
            log.Fatal(err)
        }
        handleConn2(conn)
    }
}()

最新更新