2013-03-12 74 views
3

我正在使用Go中的TCP服务器。现在,我想通知所有正在与客户交谈的客户端放弃他们的连接,抛弃他们所拥有的并停止。通知所有的goroutines

关闭频道是一种通知所有人的方法。

问题是:这是惯用的Go吗?如果我错了,那么我应该怎么做(用于通知所有的goroutine - 类似于.NET中的ManualResetEvent)?

注意:我是一个Go新手,刚刚学习并开始使用TCP Server,因为我之前已经使用C#编写过。

回答

4

是的,关闭频道是Goroutines之间沟通的惯用Go方式。

您需要在启动时向每个goroutine传递一个频道,并在每个网络事件之后使用select调用检查频道。

您还需要设置网络事件的超时时间,以便您永远不会有连接挂起。

+0

谢谢;正如你所说,我对每个连接都有一个超时。但只是为了学习的目的:是否有另一种方式与大量goroutines沟通? (除手工机制外) – 2013-03-13 07:26:46

+0

如果您没有专门编写代码来处理该通信,那么goroutine如何处理您的通信? – Daniel 2013-03-13 17:02:07

+0

否;我的意思是一些Go结构像通道或者一些Go技巧,比如在数据结构中嵌入Mutex。例如,可以在我的数据结构中嵌入一个通道(而不是定义一个字段),以便它可以与< - 操作符一起工作(我知道这不可能,但只是一个例子)。谢谢; – 2013-03-14 13:22:46

相关问题