Concurrency 为什么不使用.net/websocket';api是否使用通道发送和接收消息?

Concurrency 为什么不使用.net/websocket';api是否使用通道发送和接收消息?,concurrency,websocket,go,Concurrency,Websocket,Go,go.net/websocket包具有Read()和Write()功能,用于通过web套接字发送和接收消息。为什么它不返回用于发送和接收消息的通道?我觉得像websocket,net这样的软件包是使用go频道的完美场所。这个设计决策背后的原因是什么?我不知道WebSocket的确切语义,但总的来说,我认为网络套接字无法很好地映射到通道中。这家公司试图通过一般渠道做到这一点,但后来被停产了 我认为用一个通道实现来尝试和支持大量协议存在很多问题。消息从哪里开始和结束?通道应该缓冲一条大消息,还是一块

go.net/websocket
包具有
Read()
Write()
功能,用于通过web套接字发送和接收消息。为什么它不返回用于发送和接收消息的通道?我觉得像
websocket
net
这样的软件包是使用go频道的完美场所。这个设计决策背后的原因是什么?

我不知道WebSocket的确切语义,但总的来说,我认为网络套接字无法很好地映射到通道中。这家公司试图通过一般渠道做到这一点,但后来被停产了

我认为用一个通道实现来尝试和支持大量协议存在很多问题。消息从哪里开始和结束?通道应该缓冲一条大消息,还是一块一块地给它,等等。?每个协议的语义差异太大,因此Go为套接字提供了较低级别的读/写,就像在其他语言中一样,并让您决定如何处理数据

请注意,我所说的是一般的套接字通道。WebSocket是一个定义良好的协议,使用通道的实现可能会对它起到很好的作用。至于为什么没有选择频道,最好问问
go.net/websocket
的作者(试试
golangnuts
googlegroup)。我认为它在某种程度上是有意义的,因为它现在的API类似于常规的GoSocket API

请注意,不使用通道不会使API非并发。只要连接是在单独的goroutine上处理的(Go的HTTP服务器就是这样),它们就会被并发处理。在这里,是否使用频道只是一个方便的问题