首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“禅”不能通过RPC吗?

“禅”不能通过RPC吗?
EN

Stack Overflow用户
提问于 2022-06-30 14:27:18
回答 1查看 41关注 0票数 -2

对于下面的代码,通过RPC获取消息,为什么它的Done字段是0?

chan不能通过RPC吗?

代码语言:javascript
复制
type Message struct {
    Text string
    Done chan bool
}

type (
    GetArgs struct {
        Key string
    }
    GetReply struct {
        Message  *Message
    }
)

// Client

func connect() *rpc.Client {
    client, err := rpc.Dial("tcp", ":1234")
    if err != nil {
        log.Fatal("dialing:", err)
    }
    return client
}

func get(key string) *Message {
    client := connect()
    args := GetArgs{key}
    reply := GetReply{}
    err := client.Call("KV.Get", &args, &reply)
    if err != nil {
        log.Fatal("error:", err)
    }
    client.Close()
    return reply.Message
}

// Server

type KV struct {
    mu       sync.Mutex
    messages map[string]*Message
}

func server() {
    kv := new(KV)
    kv.messages = map[string]*Message{}

    done := make(chan bool)
    kv.messages["Jan"] = &Message{Text: "hello", Done: done}

    rpcs := rpc.NewServer()
    rpcs.Register(kv)
    l, err := net.Listen("tcp", ":1234")
    if err != nil {
        log.Fatal("error:", err)
    }
    go func() {
        for {
            conn, err := l.Accept()
            if err == nil {
                go rpcs.ServeConn(conn)
            } else {
                break
            }
        }
        l.Close()
    }()
}

func (kv *KV) Get(args *GetArgs, reply *GetReply) error {
    kv.mu.Lock()
    defer kv.mu.Unlock()

    val, ok := kv.messages[args.Key]
    if ok {
        reply.Message = val
    }

    return nil
}

func main() {
    server()

    fmt.Printf("get() -> %v\n", get("Jan"))
    // Output:
    // get() -> &{hello <nil>}

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-30 15:11:17

不是的。RPC参数只能是encoding/gob可序列化的参数,而chans是他们中没有一个参数。

功能和通道将不会被发送到一个采空区。试图在顶层编码这样的值将失败。-- chan或func类型的struct字段被处理得与未导出的字段完全一样,而忽略了

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72817557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档