在 Golang 中的同一台服务器上调用已注册的 RPC 方法

Posted

技术标签:

【中文标题】在 Golang 中的同一台服务器上调用已注册的 RPC 方法【英文标题】:Calling a registered RPC method on same server in Golang 【发布时间】:2015-04-11 21:19:38 【问题描述】:

我在 Golang 中为 RPC 的服务器程序中注册了一些方法。我想从客户端以及服务器本身使用这些方法。例如我有一个注册为 RPC 方法的添加方法,我想从客户端调用它。但是我也想在同一个服务器程序中为其他一些功能调用相同的方法。有没有办法做到这一点?

【问题讨论】:

您是否愿意承受 RPC 的开销,即使是从服务器本身调用它?如果你是,你可以打开一个到 localhost 的本地连接并像客户端一样使用它。 或者,如果这些共享方法相同,请将它们放在一个包中,并让您的 RPC 服务器和其他应用程序安装/使用该包。 【参考方案1】:

很难回答,如果我们不知道您如何通过一些示例构建代码,那会更容易。

两个选择。 使用 goroutine 创建客户端,设置与服务器的连接并调用该方法。这个方法不好,wtf。

第二:

type CalcServ struct 
  LastAnswer


type CalcReq struct 
   X int
   Y int


type CalcResp struct 
   Z int


func (serv *CalcServ) Add(req *CalcReq, resp *CalcResp) error 
  serv.LastAnswer = req.X + req.Y
  serv.Show(req, resp)
  return nil


func (serv *CalcServ) Show(req *CalcReq, resp *CalcResp) error 
  resp.Z = serv.LastAnswer
  return nil

我的例子不是一个好的实现,但它只是向你展示这个想法。 RPC方法有两种,AddShowAdd调用Show

【讨论】:

【参考方案2】:

我必须自己做。这是一个人为的例子,展示了我在我的案例中所做的事情:

这是 RPC 函数...

func (server *Server) RemoteGoroutineCount(request GoroutineCountsRequest, response *GoroutineCountsResponse) error 
    response.Count = runtime.NumGoroutine()
    return nil

现在,如果我想在本地调用它,我可以这样做

req := GoroutineCountsRequest
res := &GorouteCountsResponse
s := &Server
err := s.RemoteGoroutineCount(req, res)
// handle error
// Now res has your filled in response
res.NumGoroutines

【讨论】:

以上是关于在 Golang 中的同一台服务器上调用已注册的 RPC 方法的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使在我们调用其余调用的同一台服务器上运行 Angular 应用程序也会出现 cors 问题

Axios 前端到 Golang 后端 CORS 问题

有没有人懂破解一台设备只能注册一个号的方法,换了IP还是不行

Golang Go语言中的 defer 怎么使用?

小5聊一起聊聊平台A注册的域名备案了,在平台B有一台闲置的Windows服务器,那么能访问的了么

与节点客户端路由在同一台服务器上运行的 React 项目