登录
首页 >  Golang >  Go问答

在10秒内未响应的情况下如何设置连接超时?

来源:stackoverflow

时间:2024-03-05 11:45:19 140浏览 收藏

本篇文章向大家介绍《在10秒内未响应的情况下如何设置连接超时?》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

我有代码(我使用 https://github.com/fiorix/go-smpp):

// -----------------------------------------------
// handleconnection new clients.
// -----------------------------------------------
func (_srv *serversmpp) handleconnection(_cfg *configsmpp, c *conn) {
    defer c.close()

    if err := _srv.auth(_cfg, c); err != nil {
        if err != io.eof {
            log.printf("smpp_server: server auth failed: %s\n", err)
        }
        return
    }

    notify := make(chan error)

    go func() {
        for {
            pb, err := c.read()
            if err != nil {
                notify <- err
                return
            }

            err = _srv.handler(_srv.remoteprovider, c, pb)
            if err != nil {
                fmt.printf("%s\n", err)
                notify <- err
                return
            }
        }
    }()


    for {
        select {
        case err:= <-notify:
            if io.eof == err {
                fmt.printf("smpp server (read): %s\n", err)
                return
            }
      case <-time.after(time.second * 10):
            fmt.printf("client disconnected by timeout.\n")
            return
        }
    }
}

调用handleconnection的代码:

func (_srv *ServerSmpp) Serve(_cfg *ConfigSmpp) {
    for {
        client, err := _srv.NetListener.Accept()
        if err != nil {
            break 
        }
        c := newConn(client)

        go _srv.handleConnection(_cfg, c)
    }
}

当此代码工作时,服务器会在超时 10 秒后断开所有客户端的连接,但是当它不工作 10 秒时我如何断开客户端的连接?


解决方案


您的 client 对象似乎是 net.conn
client.read() 上阻塞之前,选择一种使用适当的 time.time 值调用 client.setreaddeadline() 的方法:

c.client.SetDeadline( time.Now().Add(10 * time.Second )
pb, err := c.Read() { ...

理论要掌握,实操不能落!以上关于《在10秒内未响应的情况下如何设置连接超时?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>