• golang工程——gRPC keep alive 配置


    keep alive 连接保活

    在Go中使用gRPC时,可以启用Keepalive来确保长时间保持连接的活动状态。Keepalive是一种机制,它在一定的时间间隔内发送心跳信号以保持连接的活跃状态

    grpc中开启保活只需添加配置即可

    服务端配置
    package server
    
    import (
    	"google.golang.org/grpc"
    	"google.golang.org/grpc/keepalive"
    	"time"
    )
    
    func GetKeepaliveOpt() (opts []grpc.ServerOption) {
    	//服务端轻质保活策略,客户端违反该策略将被关闭
    	var kaep = keepalive.EnforcementPolicy{
    		//客户端ping服务器,最小时间间隔,小于该时间间隔强制关闭连接
    		MinTime: 5 * time.Second,
    		//当前没有任何活动流的情况下,是否允许被ping
    		PermitWithoutStream: true,
    	}
    
    	var kasp = keepalive.ServerParameters{
    		//客户端空闲15秒发送goaway 指令(尝试断开连接)
    		MaxConnectionIdle: 15 * time.Second,
    		//最大连接时长30s,超时发送goaway
    		MaxConnectionAge: 30 * time.Second,
    		//强制关闭前等待时长
    		MaxConnectionAgeGrace: 5 * time.Second,
    		//客户端空闲5秒,发送ping保活
    		Time: 5 * time.Second,
    		// ping 超时时间
    		Timeout: 1 * time.Second,
    	}
    	return []grpc.ServerOption{grpc.KeepaliveEnforcementPolicy(kaep), grpc.KeepaliveParams(kasp)}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 强制客户端策略【对客户端的要求,不满足则断开】
      • MinTime: 客户端ping服务器,最小时间间隔,小于该时间间隔强制关闭连接
      • PermitWithoutStream:当前没有任何活动流的情况下,是否允许被ping

    • 服务端策略
      • MaxConnectionIdle:客户端空闲15秒发送goaway 指令(尝试断开连接)
      • MaxConnectionAge:最大连接时长30s,超时发送goaway
      • MaxConnectionAgeGrace:强制关闭前等待时长
      • Time:客户端空闲5秒,发送ping保活
      • Timeout:ping 超时时间

    添加到对应ServerOption中即可

    客户端配置
    package client
    
    import (
        "google.golang.org/grpc"
        "google.golang.org/grpc/keepalive"
        "time"
    )
    
    func GetKeepAliveOpt()(opt grpc.DialOption) {
        var kaep = keepalive.ClientParameters{
            // 如果没有活动流, 则每隔多久发一次Ping
            Time: 10 * time.Second,
            // ping 超时时长
            Timeout: time.Second,
            // 当没用任何活动流情况下,是否允许被ping
            PermitWithoutStream: true,
        }
        return grpc.WithKeepaliveParams(kaep)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • Time:如果没有活动流, 则每隔多久发一次Ping
    • Timeout:ping 超时时长
    • PermitWithoutStream:当没用任何活动流情况下,是否允许被ping

    添加到客户端的DiaOption中即可

  • 相关阅读:
    分布式事务Seata详细使用教程
    【Flink入门修炼】1-4 Flink 核心概念与架构
    this 指向问题
    【mia】rtc_Push和player拉取
    PostgreSQL元命令介绍
    Java实现常用的排序算法(冒泡排序、选择排序、插入排序、希尔排序)
    [附源码]计算机毕业设计JAVA网上宠物商店
    程序员各阶段应该掌握的技术与能力
    No module named ‘torchvision.models.feature_extraction‘
    基于Conda的PyTorch Geometric报“段错误 (核心已转储)”的解决方法
  • 原文地址:https://blog.csdn.net/qq_43058348/article/details/133384784