返回顶部
首页 > 资讯 > 精选 >禁用 keepalive 时 io.Copy 超时
  • 580
分享到

禁用 keepalive 时 io.Copy 超时

go语言 2024-02-13 22:02:29 580人浏览 薄情痞子
摘要

PHP小编鱼仔今天给大家介绍一个关于"禁用 keepalive 时 io.Copy 超时"的问题。在使用Go语言中的io.Copy函数进行数据传输时,如果禁用了keepalive,可能

PHP小编鱼仔今天给大家介绍一个关于"禁用 keepalive 时 io.Copy 超时"的问题。在使用Go语言中的io.Copy函数进行数据传输时,如果禁用了keepalive,可能会导致传输超时的问题。这个问题可能会给开发者带来一些困扰,因此我们需要了解一些解决方法来避免这个问题的发生。下面就让我们一起来看看如何解决这个问题吧!

问题内容

当我禁用 linux keepalive 时

sudo sysctl -w net.ipv4.tcp_keepalive_probes=0

并运行以下代码

package main

import (
    "fmt"
    "io"
    "net"
    "os"
    "sync"
    "time"
)

func main() {
    go func() {
        listen, err := net.Listen("tcp", "127.0.0.1:9390")
        if err != nil {
            fmt.Printf("net listen fail, reason: [%s]\n", err.Error())
            os.Exit(1)
        }
        defer listen.Close()

        for {
            conn, err := listen.Accept()
            if err != nil {
                fmt.Printf("net accept fail, reason: [%s]\n", err.Error())
                continue
            }

            _, err = io.Copy(conn, conn)
            if err != nil {
                fmt.Printf("net Copy fail, reason: [%s]\n", err.Error())
                continue
            }
            conn.Close()
        }
    }()

    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        defer wg.Done()
        for {
            time.Sleep(1 * time.Second)
            tcpAddr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:9390")
            fmt.Println("tcp client resolve success: ", tcpAddr.String())
            tcpConn, err := net.DialTCP("tcp", nil, tcpAddr)
            if err != nil {
                fmt.Println("tcp connect fail: ", err.Error())
                return
            }

            time.Sleep(100 * time.Second)
            tcpConn.Close()
            fmt.Println("tcp end")
        }
    }()

    wg.Wait()

}

io.Copy 将返回“splice: 连接超时”

如果我启用 keepalive

sudo sysctl -w net.ipv4.tcp_keepalive_probes=3

io.Copy就可以了

我尝试tcp客户端以1秒的间隔发送数据包并禁用tcp_keepalive,也可以。

我编写了另一个代码来代替 io.Copy

            buf := make([]byte, 10)
            for {
                conn.SetReadDeadline(time.Now().Add(30 * time.Second))
                n, err := conn.Read(buf)
                if err != nil {
                    fmt.Println("read fail: ", err.Error())
                    break
                }

                _, err = conn.Write(buf[:n])
                if err != nil {
                    fmt.Println("write fail: ", err.Error())
                    break
                }
            }
            conn.Close()

15秒后读取超时,30秒不工作

为什么会这样,太奇怪了?

解决方法

答案: 当“kernel tcp stack”使用keepalive检测网络时,当“kernel tcp stack”需要发送keepalive时,net.ipv4.tcp_keepalive_probes = 0将会超时

以上就是禁用 keepalive 时 io.Copy 超时的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 禁用 keepalive 时 io.Copy 超时

本文链接: https://lsjlt.com/news/564254.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 禁用 keepalive 时 io.Copy 超时
    php小编鱼仔今天给大家介绍一个关于"禁用 keepalive 时 io.Copy 超时"的问题。在使用Go语言中的io.Copy函数进行数据传输时,如果禁用了keepalive,可能...
    99+
    2024-02-13
    go语言
  • PHP怎么禁止session超时
    本文操作环境:Windows7系统,PHP7.1版,Dell G3电脑。PHP怎么禁止session超时PHP防止session过期的一个简单方法最近有用户反映辛辛苦苦写了几个小时的文章一点击提交,却被告知需要重新登录,这确实是一件很郁闷的...
    99+
    2018-05-19
    PHP session
  • PHP如何禁止session超时
    本篇内容主要讲解“PHP如何禁止session超时”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP如何禁止session超时”吧!PHP禁止session超时的方法:1、在PHP文件中设置“...
    99+
    2023-06-22
  • php更改超时时间
    在开发Web应用程序过程中,我们通常会遇到需要执行较为耗时的操作,例如上传文件、生成报表等。这些操作可能需要执行数十秒、甚至数分钟的时间,但默认情况下,PHP脚本的执行时间是有限制的,如果超过了该限制,就会抛出“Maximum execut...
    99+
    2023-05-24
  • Laravel如何禁用时间戳
    这篇文章将为大家详细讲解有关Laravel如何禁用时间戳,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。禁用时间戳如果数据表没有这两个字段,保存数据时 Model::create($arrayOfValue...
    99+
    2023-06-27
  • ubuntu如何禁用utc时间
    本篇内容介绍了“ubuntu如何禁用utc时间”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!原因如下     ...
    99+
    2023-07-04
  • 详解Vue适时清理keepalive缓存方案
    目录需求思考尝试1. 手动操作 keep-alive 组件的 cache 数组2. exclude 大法好Demo需求 单页面应用中,用户进入表单填写页面,需要初始化表单内容,填写过...
    99+
    2024-04-02
  • client.等待标头时超时
    知识点掌握了,还需要不断练习才能熟练运用。下面编程网给大家带来一个Golang开发实战,手把手教大家学习《client.等待标头时超时》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回...
    99+
    2024-04-04
  • element中TimePicker时间选择器禁用部分时间(显示禁用到分钟)
    项目需求是:选择日期和时间,只能选择当前时间以后的时间,禁用最小级别到分钟. 有两种选择 1.使用DateTimePicker 日期时间选择器. 2.DatePicker 和 Ti...
    99+
    2024-04-02
  • win10实时防护怎么禁用
    本文小编为大家详细介绍“win10实时防护怎么禁用”,内容详细,步骤清晰,细节处理妥当,希望这篇“win10实时防护怎么禁用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。win10实时防护禁用的方法:右击此电脑,...
    99+
    2023-07-01
  • ubuntu下怎么禁用utc时间
    本篇内容介绍了“ubuntu下怎么禁用utc时间”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言大家在安装双系统以后,发现进入win7和u...
    99+
    2023-07-04
  • php.ini怎么设置超时时间
    本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,倘若你有一个需要颇多时间才能完成的工作,...
    99+
    2021-08-07
    php.ini 超时时间
  • SpringBoot设置接口超时时间
    SpringBoot设置接口访问超时时间有两种方式一、在配置文件application.properties中加了spring.mvc.async.request-timeout=20000,意思是设置超时时间为20000ms即20s,二、...
    99+
    2015-11-02
    java教程 SpringBoot
  • php怎么改变超时时间
    随着业务发展,网站访问量越来越大,很多时候我们需要执行较长时间的 PHP 脚本。但是 PHP 默认的超时时间仅为 30 秒,远远无法满足业务需要。为了解决这个问题,我们需要对 PHP 的超时时间进行修改。下面是一些可以改变 PHP 超时时间...
    99+
    2023-05-14
  • php如何改变超时时间
    本篇内容主要讲解“php如何改变超时时间”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php如何改变超时时间”吧!下面是一些可以改变 PHP 超时时间的方法:修改 php.ini这是最常见的方式...
    99+
    2023-07-05
  • MongoDB 访问超时
    MongoDB版本:3.2.6 cacheSizeGB: 32 引擎:WiredTiger 架构:副本集 业务请求MongoDB出现超时现象。 查看MongoDB日志,存在大量的慢更新语句,通过netdat...
    99+
    2024-04-02
  • ?ORACLE会话超时
    ORACLE会话超时 ...
    99+
    2024-04-02
  • Java连接超时
    java.net.SocketTimeoutException: connect timed out 通常表示无法建立到远程服务器的连接,可能是由于网络问题或目标服务器不可用导致的。这种情况下,可以尝试以下几种解决方法: 检查网络连接:可...
    99+
    2023-09-02
    java
  • Postman 请求超时
    Postman发送连接时返回Error: Request timed out 服务器端已经启动,通过Postman进行测试时报错。在查阅各个网站资料后解决方法有两种,一是修改setting中的ssl...
    99+
    2023-09-06
    服务器
  • Nginx超时配置
    Nginx超时配置 Nginx主要有四类超时设置:客户端超时设置、DNS解析超时设置、代理超时设置,如果使用ngx_lua,则还有lua相关的超时设置。 1.客户端超时设置 对于客户端超时主要设置有读...
    99+
    2023-10-05
    nginx lua java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作