并发 – Golang阻止通道阻塞
发布时间:2020-12-16 09:23:49 所属栏目:大数据 来源:网络整理
导读:我正在构建一个使用websockets的服务器. 目前,每个连接的客户端都使用两个goroutine.一个用于阅读,一个用于写作. 写作goroutine基本上会收听它应该发送的消息的频道,然后尝试传递它们. type User struct{ send chan []byte ...}func (u *User) Send(msg []by
我正在构建一个使用websockets的服务器.
目前,每个连接的客户端都使用两个goroutine.一个用于阅读,一个用于写作. 写作goroutine基本上会收听它应该发送的消息的频道,然后尝试传递它们. type User struct{ send chan []byte ... } func (u *User) Send(msg []byte){ u.send <- msg } 问题是,来自客户端A的读取可能导致写入客户端B. 我想解决它有点像这样: func (u *User) Send(msg []byte) err{ u.send,err <- msg if err != nil{ //The channels buffer is full. //Writing currently not possible. //Needs appropriate error handling. return err } return nil } 基本上不是阻塞我想要缓冲区已满的错误处理. 解决方法
正如ThunderCat在他的评论中指出的那样,解决方案是
func (u *User) Send(msg []byte){ select{ case u.send <- msg: default: //Error handling here } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |