全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何使用Golang构建双向RPC通信_客户端与服务端互调数据

Go 语言 net/rpc 实现双向 RPC 需双方均启动 RPC Server 并互相注册 handler;客户端须监听地址、导出方法、告知服务端 callback 地址,服务端通过新建连接调用;推荐 JSON-RPC + HTTP,注意连接生命周期与资源泄漏防控。

Go 语言标准库的 net/rpc 包原生支持双向 RPC,但需注意:它本身不直接提供“客户端也能被服务端调用”的能力,必须通过双方都启动 RPC 服务并互相注册 handler 来实现双向调用。核心思路是:客户端既是 RPC 调用方(client),也是 RPC 服务端(server);服务端同理。

服务端主动调用客户端的关键:客户端也要启动 RPC Server

标准 rpc.ServeConnrpc.ServeHTTP 只监听连接,不自动反向暴露接口。要让服务端能调用客户端方法,客户端必须:

  • 监听一个本地或可访问的网络地址(如 localhost:8081),启动自己的 rpc.Server
  • 注册至少一个 handler(例如 ClientHandler),导出方法(首字母大写 + 符合 RPC 方法签名:func(*Args, *Reply) error
  • 在连接建立后,把自身服务地址告诉服务端(可通过初始握手消息、配置文件、或服务端预置方式)

使用 HTTP+JSON-RPC 实现双向通信更简洁

net/rpc/jsonrpc 比默认 gob 更易调试,且天然兼容 HTTP。推荐结构:

  • 服务端监听 :8080,提供 UserSvcNotifySvc 等服务
  • 客户端启动时监听 :8081,注册 ClientCallback 服务(含 OnDataUpdate 等方法)
  • 客户端首次连接服务端时,发送自身 callback 地址(如 http://127.0.0.1:8081/rpc),服务端保存并创建对应 client
  • 服务端后续可通过 jsonrpc.NewClient 连接该地址,发起回调

避免连接循环与资源泄漏的实用技巧

双向连接容易引发 goroutine 泄漏或死锁,务必注意:

  • 每个 RPC 连接应有明确生命周期,建议用 context.WithTimeout 控制调用超时
  • 客户端连接服务端后,不要复用同一连接发起反向调用(gob 编码不支持双工);应新建独立连接到客户端监听地址
  • 服务端保存客户端 callback client 时,用 sync.Map 并配合心跳/重连机制;客户端退出前主动通知服务端注销
  • 所有 handler 方法末尾加 defer 日志或计数器,便于排查未结束调用

一个最小可运行示例的核心片段

客户端启动 RPC server:

l, _ := net.Listen("tcp", ":8081")
s := rpc.NewServer()
s.RegisterName("Client", &ClientHandler{})
go http.Serve(l, s)

服务端调用客户端:

client, _ := jsonrpc.DialHTTP("tcp", "127.0.0.1:8081")
var reply string
client.Call("Client.OnDataUpdate", args, &reply)

关键点:方法名格式为 "ServiceName.MethodName",参数和返回值必须是导出类型,且有无参构造函数。

不复杂但容易忽略:双向 RPC 不是开箱即用的“对等通信”,而是两个独立 RPC 系统通过约定地址和协议协作完成的。只要双方都跑 server、都建 client、地址互通、方法匹配,就能稳定互调。


# js  # json  # go  # golang  # 编码  # 配置文件  # 标准库  # 构造函数  # Error  # 循环  # 接口  # map  # http  # rpc  # 服务端  # 客户端  # 死锁  # 可通过  # 双工  # 双方都  # 自己的  # 就能  # 首次  # 也要 


相关文章: 西安专业网站制作公司有哪些,陕西省建行官方网站?  公司网站设计制作厂家,怎么创建自己的一个网站?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  如何通过山东自助建站平台快速注册域名?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  建站之星如何实现网站加密操作?  简历在线制作网站免费版,如何创建个人简历?  建站VPS能否同时实现高效与安全翻墙?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  怀化网站制作公司,怀化新生儿上户网上办理流程?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何挑选优质建站一级代理提升网站排名?  建站主机功能解析:服务器选择与快速搭建指南  网站设计制作公司地址,网站建设比较好的公司都有哪些?  ,网页ppt怎么弄成自己的ppt?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何在建站主机中优化服务器配置?  如何快速完成中国万网建站详细流程?  官网网站制作腾讯审核要多久,联想路由器newifi官网  营销式网站制作方案,销售哪个网站招聘效果最好?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何解决VPS建站LNMP环境配置常见问题?  一键网站制作软件,义乌购一件代发流程?  婚礼视频制作网站,学习*后期制作的网站有哪些?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  如何挑选最适合建站的高性能VPS主机?  网站制作壁纸教程视频,电脑壁纸网站?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  南宁网站建设制作定制,南宁网站建设可以定制吗?  建站之星安装需要哪些步骤及注意事项?  建站主机选购指南:核心配置优化与品牌推荐方案  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  北京网站制作的公司有哪些,北京白云观官方网站?  如何选择CMS系统实现快速建站与SEO优化?  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  如何快速搭建二级域名独立网站?  表情包在线制作网站免费,表情包怎么弄?  建站之星后台密码遗忘?如何快速找回?  Swift中循环语句中的转移语句 break 和 continue  制作网站外包平台,自动化接单网站有哪些?  香港服务器租用每月最低只需15元?  如何获取开源自助建站系统免费下载链接?  如何在云虚拟主机上快速搭建个人网站?  微信推文制作网站有哪些,怎么做微信推文,急?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  简单实现Android验证码 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。