Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Go中禁用http警报_Http_Go - Fatal编程技术网

如何在Go中禁用http警报

如何在Go中禁用http警报,http,go,Http,Go,调用http.ListenAndServe时,我遇到以下错误问题: http: Accept error: *ip* accept tcp too many open files; retrying in 10ms 如何禁用此功能ulimit-n是1024,我无法更改它。的客户端少于1000个 你希望这里发生什么?您似乎无法满足资源需求。问题是您无法再打开文件描述符,因此无法接受更多连接。如果您无法改变事实,您有三种可能的选择来处理此问题: 保持原样:标准库使用一个函数来等待再次出现文件描述符

调用http.ListenAndServe时,我遇到以下错误问题:

http: Accept error: *ip* accept tcp too many open files; retrying in 10ms

如何禁用此功能
ulimit-n
是1024,我无法更改它。

的客户端少于1000个


你希望这里发生什么?您似乎无法满足资源需求。

问题是您无法再打开文件描述符,因此无法接受更多连接。如果您无法改变事实,您有三种可能的选择来处理此问题:

  • 保持原样:标准库使用一个函数来等待再次出现文件描述符的时间。这通常是一个很好的实践,为未来的客户提供了一个获得插槽的机会。事实上,
    http
    包对发生的每个临时网络错误都执行此操作
  • 当出现这样的临时错误时,请关闭连接。这可以通过包装由
    net.Listen
    返回的
    net.Listener
    并修改其
    Accept()
    方法来实现,以便在出现临时错误时断开连接
  • 忽略此消息。如果消息是唯一困扰您的事情,您只需将
    log.Output()
    设置为
    ioutil.Discard
    。(虽然这是一个选项,但我看不出有什么用处。你最终会忽略重要的错误消息,并想知道为什么你的服务不起作用。)
  • 我更喜欢第一个,但可能有一种情况下您需要第二个,因此这里有一个连接删除侦听器()的示例:

    使用此
    DroppingListener
    Accept
    方法将在有连接时立即返回连接
    不再出现临时错误。

    请单击如何禁用allerts mess。用户将选择#3。将普遍应用这一变化。任何事情都不会起作用,用户也不知道为什么。当然,这不是你的错。你的答案都是正确的,但我担心导致这个问题的思维有问题。虽然我和你一样担心,但隐藏信息不会有帮助。我只能警告你不要这样做。我编辑了答案3,更具体地说,这不是一个好主意。
    type DroppingListener struct {
        net.Listener
    }
    
    func (d DroppingListener) Accept() (net.Conn, error) {
        for {
            conn, err := d.Listener.Accept()
    
            if err != nil {
                if ne, ok := err.(net.Error); ok && ne.Temporary() {
                    log.Println("Dropping connection because:", ne)
                    continue
                }
            }
    
            return conn, err
        }
    }
    
    func ListenAndServe(addr string, handler http.Handler) error {
        srv := &http.Server{Addr: addr, Handler: handler}
    
        l, e := net.Listen("tcp", addr)
        if e != nil {
            return e
        }
    
        l = &DroppingListener{l}
    
        return srv.Serve(l)
    }