我正在用 Go 编写一个 websocket 服务器,用于向客户端广播消息。我在每次发送时都使用 SetWriteDeadline,这样广播循环就不会卡住。
我的问题是:如何解释来自 SetWriteDeadline 的错误?特别是,我是否应该假设该特定客户端有问题并取消注册?还是恰好在此客户端上触发了服务器端问题?
经过研究SetWriteDeadline,我发现deadline是将消息放到TCP栈服务端,不是客户端接收消息。所以也许更好的表达我的问题的方式是:每个 websocket 客户端是否有一个单独的 TCP 堆栈(也许这是具有大小 WriteBufferSize 的东西),或者这个缓冲区是否在客户端之间共享?在前一种情况下,我似乎应该在出现 SetWriteDeadline 错误时取消注册客户端,但在后一种情况下则不然。
最佳答案
Websocket 连接独立于其他 websocket 连接。
Websocket 连接具有底层网络连接。这些网络连接也是相互独立的。
从 SetWriteDeadline 返回的错误表示该特定 websocket 连接或 websocket 连接的底层网络连接有问题。
另请注意 Gorilla's SetWriteDeadline方法从不返回错误。
关于go - SetWriteDeadline 错误解读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50494034/