我有一个正在侦听TCP连接并将这些通道发送回主循环的去程序。我在做例行程序的原因是让这个监听不阻塞,并且能够同时处理活动连接。从Go通道获取价值
我有一个空的默认情况下,像这样的select语句来实现这一点:
go pollTcpConnections(listener, rawConnections)
for {
// Check for new connections (non-blocking)
select {
case tcpConn := <-rawConnections:
currentCon := NewClientConnection()
pendingConnections.PushBack(currentCon)
fmt.Println(currentCon)
go currentCon.Routine(tcpConn)
default:
}
// ... handle active connections
}
这里是我的pollTcpConnections常规:
func pollTcpConnections(listener net.Listener, rawConnections chan net.Conn) {
for {
conn, err := listener.Accept() // this blocks, afaik
if(err != nil) {
checkError(err)
}
fmt.Println("New connection")
rawConnections<-conn
}
}
的问题是,我从来没有收到这些连接。如果我做一个堵的方式,像这样:
for {
tcpConn := <-rawConnections
// ...
}
我收到的连接,但它会阻止......我试图缓冲通道为好,但同样的事情发生。我在这里错过了什么?
请参阅[这个问题](http://stackoverflow.com/questions/14633373/how-to-do-nothing-when-no-channel-is-ready-to-beread)为答案。 – thwd