我们可以在Go中使用select to Accept()来自不同的侦听器吗?

时间:2017-09-10 08:50:28

标签: go goroutine

正如以下代码:

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

中实现类似的功能

1 个答案:

答案 0 :(得分:1)

select仅适用于频道(请参阅此处:https://gobyexample.com/select

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

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