0

我尝试用 Go 编写一个 kv-raft 服务器代码。(参考这篇文章)。

context.Context但是,如果我想在我的 RPC 调用参数中使用,我发现有问题

// Init of my RPC server
kv := new(KVRaft)
rpcs := rpc.NewServer()
rpcs.Register(kv)
....


//My RPC call function
func (kv *KVRaft) Msg(args *context.Context, reply *MsgReply) error {
    log.Println("[MSG]", *args)
    return nil
}

可以编译代码但是当我尝试运行时

c, _ := rpc.Dial("tcp", ":1234")
var reply MsgReply{}

c.Call("KVRaft.Msg", someContext, &reply)

它会弹出错误为 gob: type not registered for interface: context.emptyCtx

如果我替换*context.Context*string. 我用谷歌搜索它可以使用gob.Register(),但我编译失败了gob.Register(context.Context{})

invalid type for composite literal: "golang.org/x/net/context".Context

知道如何context.Context作为 gob RPC 调用参数传递吗?

[更新]

我尝试使用gob.Register(context.Background()),但在接收 RPC 调用时它会得到空上下文。

[更新] 目前我的回购在这里,但仍在进行中。

4

0 回答 0