如果客户端在 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 秒时我如何断开客户端的连接?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)