在 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方法有两种,Add
和Show
,Add
调用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 问题
有没有人懂破解一台设备只能注册一个号的方法,换了IP还是不行