- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
当我关闭浏览器时,我想在 3 秒而不是 1 分钟内断开 websocket。以下只是继续写入 void 而不会出错,直到我猜的 tcp ip 超时,而不是 SetWriteDeadline。
f := func(ws *websocket.Conn) {
for {
select {
case msg := <-out:
ws.SetWriteDeadline(time.Now().Add(3 * time.Second))
if _, err := ws.Write([]byte(msg)); err != nil {
fmt.Println(err)
return
}
case <-time.After(3 * time.Second):
fmt.Println("timeout 3")
return
}
}
}
return websocket.Handler(f)
我需要等待这个错误
write tcp [::1]:8080->[::1]:65459: write: broken pipe
在它最终关闭连接之前,这大约需要一分钟或更长时间。
最佳答案
您是否正确使用了 WriteDeadline。截止日期指定将数据写入 TCP 堆栈的缓冲区的时间,而不是对等方接收数据的时间(如果它收到的话)。
为了可靠地检测关闭的连接,应用程序应该向对等方发送 PING 并等待预期的 PONG。您使用的包不支持此功能,但 Gorilla包确实如此。 Gorilla chat application展示了如何使用 PING 和 PONG 检测关闭的连接。
关于go - 如何使用ws.SetWriteDeadline?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37822168/
我正在用 Go 编写一个 websocket 服务器,用于向客户端广播消息。我在每次发送时都使用 SetWriteDeadline,这样广播循环就不会卡住。 我的问题是:如何解释来自 SetWrite
当我关闭浏览器时,我想在 3 秒而不是 1 分钟内断开 websocket。以下只是继续写入 void 而不会出错,直到我猜的 tcp ip 超时,而不是 SetWriteDeadline。 f :=
我正在用 Golang 编写一个 TCP 客户端。服务器永远不会发送任何回复或任何数据。 一旦我在给定的超时后无法写入,我希望客户端关闭连接。 因此,通过阅读 Conn 中的 SetWriteDead
Go 的 websockets 有一个 SetWriteDeadline() 函数来设置连接的网络写入截止时间。是否需要在每次发送数据前设置,还是在创建连接时设置一次? 最佳答案 要使它有用,请每次都
我试图通过检查 golang TCPConn.Write 返回的错误来检测发送失败,但它是零。我也尝试使用 TCPConn.SetWriteDeadline没有成功。 事情就是这样发生的: 服务器启动
我的 TCP 连接有问题。 我有一个用 go 编写的服务器,它在某个端口上监听 tcp 连接。我有用 Java 为 Android 编写的客户端。客户端与服务器建立连接,然后在没有任何规律的情况下交换
我是一名优秀的程序员,十分优秀!