我在Go中编写了一个Websocket服务器,该服务器将消息广播到客户端。我在每次发送时都使用SetWriteDeadline,这样广播循环就不会卡住。
我的问题是:如何解释SetWriteDeadline中的错误?特别是,我是否应该假设该特定客户端出了问题并取消注册?还是在此客户端上触发的服务器端问题?
在研究SetWriteDeadline之后,我发现截止日期是将消息放置在TCP堆栈服务器端的期限,而不是客户端接收消息的期限。因此,也许用一种更好的方式来表达我的问题是:每个websocket客户端是否有单独的TCP堆栈(也许这是大小为WriteBufferSize的东西),或者此缓冲区在客户端之间共享?在前一种情况下,似乎应该在发生SetWriteDeadline错误时注销客户端,但在后一种情况下则不应该。
最佳答案
Websocket连接独立于其他Websocket连接。
Websocket连接具有基础网络连接。这些网络连接也彼此独立。
从SetWriteDeadline返回的错误表示该特定的websocket连接或websocket连接的基础网络连接有问题。
还要注意Gorilla's SetWriteDeadline方法从不返回错误。