RPC 调用找不到方法

Posted

技术标签:

【中文标题】RPC 调用找不到方法【英文标题】:RPC call cannot find method 【发布时间】:2020-07-12 23:43:01 【问题描述】:

我正在尝试实现 Raft 共识算法,但由于某种原因无法使用 RPC 调用。我正在使用 labrpc.go 拨打电话。

我的函数签名:

func (rf *Raft) RequestVotes(args RequestVoteArgs, reply *RequestVoteReply) bool

还有我正在打的电话

if err := rf.peers[peerIdx].Call("Raft.RequestVotes", args, &reply); err == false 

筏结构:

type Raft struct 
... 
peers     []*labrpc.ClientEnd // RPC end points of all peers
...

但我不断收到此错误:

labrpc.Service.dispatch(): Raft.RequestVotes 中的未知方法 RequestVotes;期待 [] 之一

我还有其他几个 Raft. 方法,那么 期望 [] 之一应该是非空的吗?

【问题讨论】:

【参考方案1】:

RPC 方法未被识别为 RPC 方法,因为我明确返回 bool。将代码更改为 return void(完全删除 return)解决了这个问题。

更新的函数签名:

func (rf *Raft) RequestVotes(args RequestVoteArgs, reply *RequestVoteReply) 

【讨论】:

以上是关于RPC 调用找不到方法的主要内容,如果未能解决你的问题,请参考以下文章

golang rpc找不到服务

C# - Windows 服务 - 远程 WMI 查询抛出错误:找不到 RPC

vue项目 iOS调用JS方法报错找不到方法

Swift WKWebView:调用方法时找不到变量错误

spi找不到对应的类

水晶报表 Crystal Report 调用存储过程时出错 找不到表 ,解决方法。