为了账号安全,请及时绑定邮箱和手机立即绑定

允许在 net.Conn 和频道上选择 Go Routine 的方法?

允许在 net.Conn 和频道上选择 Go Routine 的方法?

Go
一只名叫tom的猫 2022-06-27 15:29:51
我觉得这一定是一种常见的 Go 模式,但似乎找不到解决方案。假设有一个 Go 应用程序正在建立出站 TCP 连接。我将使用net.Dial并在连接后生成一个 Go 例程来处理套接字 ( net.Conn)。这是非常简单和常见的。我想弄清楚的是,让这个 Go 例程有一个通道,它正在读取和写入来自这个套接字的消息的最佳方法是什么?selectonly 能够在频道上等待,而不是net.Conn. 我是否轮询套接字以获取数据,然后检查通道以获取数据?这似乎非常低效。
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

这个问题的一个常见解决方案是创建两个 goroutine:一个从套接字读取并写入通道,另一个从通道读取并写入套接字。从套接字读取的 goroutine 应该在套接字关闭时终止,并向另一个 goroutine 发出信号(通过取消上下文或关闭通道),使其停止在通道上等待。



查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信