不能在golang中使用context.Context作为gob RPC调用参数

时间:2016-03-09 17:54:27

标签: go rpc gob

我尝试在Go中编写一个kv-raft服务器代码。 (请参阅此article)。

但是如果我想在我的RPC调用参数

中使用context.Context,我发现存在问题
// 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调用时会得到空的上下文。

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

0 个答案:

没有答案