通常,你在Go中接受连接是这样的:
l, err := net.Listen("tcp", ":2000")
if err != nil {
log.Fatal(err)
}
for {
conn, err := l.Accept() // BLOCKING HERE
...
}
我需要一种根据用户输入暂停和恢复for
循环的方法。我发现的最接近的是answer,其中接受发生在一个单独的goroutine中,然后conn
通过一个通道传递。
但是我不知道如何强制goroutine在挂起时退出,我不想在用户挂起操作时继续接受新的连接。
1条答案
按热度按时间v7pvogib1#
基于我所得到的,我把一个小例子,以显示我会怎么做。首先,让我分享代码,然后我会带你通过所有相关的部分。
让我们从简单的部分开始,即函数
handleConnection
。handleConnection
函数这个函数接受一个
chan<- string
和一个net.Conn
,chan<- string
是我们用来写入消息的对象,net.Conn
代表了一个到我们监听器的新连接。为了尝试这一点,我从我的终端使用telnet连接。这个函数的作用是:STOP
字是否已写入并最终从函数返回main
函数这个函数做了几件值得一提的事情:
2000
上设置net.Listener
messages
通道上运行STOP
,则关闭net.Listener
并退出函数Accept
方法以侦听传入的TCP客户端连接我希望这能稍微澄清你的问题。如果我没有涵盖的东西,只是让我知道,我会很乐意更新我的答案,谢谢!