Go Websocket正在等待超时的消息
我想通过GO创建Websocket连接。这种连接遵循一种明确定义的模式:客户机应该在创建连接后立即“验证”(输入数据)。如果客户端不这样做,则连接将在短时间后关闭 我的当前代码包含此初始超时(initTimeout)和所有连接的最大超时。虽然可以轻松检查这些计时器,但我不确定如何将计时器与等待阻止执行的消息结合起来Go Websocket正在等待超时的消息,go,Go,我想通过GO创建Websocket连接。这种连接遵循一种明确定义的模式:客户机应该在创建连接后立即“验证”(输入数据)。如果客户端不这样做,则连接将在短时间后关闭 我的当前代码包含此初始超时(initTimeout)和所有连接的最大超时。虽然可以轻松检查这些计时器,但我不确定如何将计时器与等待阻止执行的消息结合起来 ws, err := upgrader.Upgrade(w, r, nil) initTimeout := time.NewTicker(time.Duration(30) * ti
ws, err := upgrader.Upgrade(w, r, nil)
initTimeout := time.NewTicker(time.Duration(30) * time.Second)
maxTimeout := time.NewTicker(time.Duration(45) * time.Minute)
for {
select {
case <- initTimeout.C:
ws.WriteMessage(websocket.TextMessage, []byte("No input received"))
ws.Close()
case <- maxTimeout.C:
ws.WriteMessage(websocket.TextMessage, []byte("Maximum timeout"))
ws.Close()
default:
mt, message, err := c.ReadMessage()
// will this block the timers?
}
}
ws,err:=upgrader.Upgrade(w,r,nil)
initTimeout:=time.NewTicker(time.Duration(30)*time.Second)
maxTimeout:=time.NewTicker(time.Duration(45)*time.Minute)
为了{
挑选{
案例使用执行超时:
ws, err := upgrader.Upgrade(w, r, nil)
if err != nil {
// handle error
}
// Read the initial message with deadline of 30 seconds
ws.SetReadDeadline(time.Now().Add(30 * time.Second))
mt, message, err := c.ReadMessage()
if err != nil {
// Handle the error which might be a deadline exceeded error.
}
// process the initial message
// ...
for {
// Read next message with deadline of 45 minutes
ws.SetReadDeadline(time.Now().Add(45 * time.Minute))
mt, message, err = c.ReadMessage()
if err != nil {
// Handle the error which might be a deadline exceeded error.
}
// process message
// ....
}