以前在调用grpc接口时,总要调用Dial函数来创建一个grpc的ClientConn,如果每次都要创建,那么开销代价是很大的。

grpc的ClientConn对象可以帮我们实现自动重连的机制,并且是并发安全的,因此可以定义一个全局的ClientConn,然后用到的时候就用这个连接。

下面是简易实现:

package delayqueueimport ("google.golang.org/grpc""sync""sync/atomic""unsafe"
)var (globalClientConn unsafe.Pointerlck              sync.Mutex
)func GetClient(target string) (DelayQueueClient, error) {  //返回需要的clientconn, err := GetConn(target)if err != nil {return (DelayQueueClient)(nil), err}return NewDelayQueueClient(conn), nil  //此处调用pb.go文件中生成的创建client的方法
}func GetConn(target string) (*grpc.ClientConn, error) {if atomic.LoadPointer(&globalClientConn) != nil {return (*grpc.ClientConn)(globalClientConn), nil}lck.Lock()defer lck.Unlock()if atomic.LoadPointer(&globalClientConn) != nil { //double checkreturn (*grpc.ClientConn)(globalClientConn), nil}cli, err := newGrpcConn(target)if err != nil {return nil, err}atomic.StorePointer(&globalClientConn, unsafe.Pointer(cli))return cli, nil
}func newGrpcConn(target string) (*grpc.ClientConn, error) {conn, err := grpc.Dial(target,grpc.WithInsecure(),)if err != nil {return nil, err}return conn, nil
}

grpc复用client连接相关推荐

  1. 带入gRPC:gRPC Streaming, Client and Server

    带入gRPC:gRPC Streaming, Client and Server 原文地址:带入gRPC:gRPC Streaming, Client and Server 项目地址:go-grpc- ...

  2. oracle kepserve,Kepware.KEPServer\KEPServerEX_V5操作简介含opc quick client 连接测试

    [实例简介] Kepware.KEPServer\KEPServerEX_V5操作简介含opc quick client 连接测试 3.開魯 KEPServereX的管理視窗 請從「開始」->「 ...

  3. VMware View Client 连接服务器,提示身份验证失败,连接服务器时

    第一次安装或则重装系统后安装VMware View的时候  点击下一步 然后连接服务器地址  例如:192.168.xx.xxx,点击连接后,在输入账号的时候弹出VMware View Client ...

  4. Paho Java Client 连接阿里云物联网平台

    Paho Java Client 连接阿里云物联网平台 进入阿里云物联网平台->点击产品->新建 点击设备->添加设备 查看设备证书,复制记录,后面使用 阿里云TCP通信 一机一密. ...

  5. vSphere Client连接主机提示远程服务器响应时间过长

    问题现象 使用VMware vSphere Client连接EXSi主机时,提示"由于远程服务器响应时间过长,请求失败(操作超时)". 解决方法 打开Windows注册表,找到HK ...

  6. Prosys OPC Client连接OPC DA

    Prosys OPC Client连接OPC DA Prosys OPC 客户端将帮助排除 OPC 连接故障并测试 OPC 服务器. 您可以读写数据.浏览服务器以及导出和导入地址空间. OPC 客户端 ...

  7. TDH Kerberos java client 连接Hyperbase(Hbase)

    TDH Kerberos java client 连接Hyperbase(Hbase) 异常信息 SASL authentication failed. The most likely cause i ...

  8. 【翻译自mos文章】对于JDBC thin client连接,ORA-28040 and SQLNET.ALLOWED_LOGON_VERSION_CLIENT

    对于JDBC thin client连接,ORA-28040 and SQLNET.ALLOWED_LOGON_VERSION_CLIENT的问题 来源于: ORA-28040 and SQLNET. ...

  9. Go http client 连接池不复用的问题

    当 http client 返回值为不为空,只读取 response header,但不读 body 内容就执行 response.Body.Close(),那么连接会被主动关闭,得不到复用. 测试代 ...

  10. c++排查线程hang住_Kafka学习笔记之kafka高版本Client连接0.9Server引发的血案排查 - 时光飞逝,逝者如斯...

    0x00 概述 kafka server虽然原则上是兼容详细的client,但只是高版本的Server端兼容低版本的Client端: 在有高版本Client端连接时,会导致低版本Server集群会ha ...

最新文章

  1. Python 获取项目根路径
  2. 学习笔记:Windows 下Keras安装和配置指南
  3. 【深度学习】图片分类CNN模板
  4. [导入]存储过程-分隔符号-多条件查询
  5. ASP.Net学习笔记006--Get和Post的区别
  6. 解决岛屿类问题(网格)通用解法DFS(附题)
  7. java改变人物动作_Java创建对象的动作分析
  8. Eigen教程(5)
  9. 2019上半年系统集成项目管理工程师上午真题及答案解析
  10. Android统计图控件之圆饼图
  11. 德州大学计算机系郭小虎2021,2021美国德州农工大学PhD项目
  12. 计算机协会游园活动方案,计算机爱好者协会建设策划方案
  13. ElasticSearch7 集群安装和配置
  14. 【C语言】图像处理-揭秘电影特效,随心所欲,合成图像
  15. MySQL5.7和MySQL8的区别
  16. UE4_第三方库的引用
  17. 《Spring揭秘》读后感(给你们强烈安利这本书)
  18. 单招面试的自我介绍计算机,单招面试自我介绍分享
  19. 学计算机的千万不要去高中当老师.
  20. 如何实现USB Type-c转HDMI2.0功能方案

热门文章

  1. 网口压线顺序_网线水晶头接法顺序_网线水晶头接法口诀
  2. 什么是EMC?什么是EMI?什么是EMS?电磁兼容详解(一)
  3. win7计算机管理员与超级,win7系统家庭版开启Administrator超级管理员帐户的详细技巧...
  4. #cs231n#Assignment2:Dropout.ipynb
  5. 服务器双向同步文件,lsyncd配置两台服务器文件双向实时同步
  6. 怎样从微博下载视频?
  7. unity3d 任务系统设计 mmo
  8. 易优CMS插件-站长必备易优CMS插件
  9. 心绞痛--大柴胡汤合桂枝茯苓丸---胡希恕
  10. 读《富爸爸,穷爸爸》后感(四)