新手问题 golang如何处理socket消息的超时重发

iframe · 2016年12月26日 · 最后由 iframe 回复于 2016年12月27日 · 59 次阅读

使用 go 作 client 端发送消息,如果 server 端没有及时回应答,过一段时间后就要进行消息重发,重发 3 次后如果还没有收到应答,则将消息释放或者写入文件。

请问使用 golang 如何实现?

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

消息交互量可能很大,需要匹配消息应答。

Repeat:
    req.Write(dnsByte)
    times := time.Now().Add(time.Second * 3)
    req.SetReadDeadline(times)
    size, err := req.Read(resByte)
    if err != nil {
        if repeatNum < 3 {
            repeatNum++
            goto Repeat // 超时重试3次
        }
    } else {
        result, err = UnPack(resByte[:size]) // 解包
        if err != nil {
            return result, err
        }
    }

非常感谢,我开始想的是用 chan 和 select 来作。 ch := make(chan int, 1)//收到应答 ch<-1 timeout := make(chan bool, 1) go func() { time.Sleep(time.Second * 3) if repeatNum < 3 { repeatNum++ } else{ timeout <- true } }() select { case <- ch : fmt.Println("read from ch") case <- timeout : fmt.Println("time out...")

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册