登录
首页 >  Golang >  Go问答

返回类型为channel的go RPC调用

来源:stackoverflow

时间:2024-02-20 13:57:27 387浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《返回类型为channel的go RPC调用》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

首先,这是一个 prc服务器。请注意返回类型之一是 chan

func (c *coordinator) fetchtask() (*chan string, error) {
    // ...
    return &reply, nil
}

然后客户端进行 rpc 调用。通常调用者会得到一个类型为 *chan string 的通道。

call("coordinator.fecthtask", &args, &reply)

这是我的问题。如果服务器不断向通道写入:

for i := 0; i < 100; i++ {
    reply<- strconv.itoa(i)
}

客户端可以连续读取通道中的read吗?

for {
    var s string = <-reply
}

我猜客户端不能,因为服务器和客户端不在同一内存中。他们通过互联网进行交流。因此,即使变量reply是一个指针,它在服务器和客户端中也指向不同的地址。

我对此不太确定。你怎么看呢?非常感谢!!!!

顺便说一句,是否有办法在服务器和客户端之间实现real有状态通道?


正确答案


正如您已经提到的,通道位于内存变量中,无法在其他应用程序或系统中使用它们。另一方面,gRPC 将传递并解析二进制数据,在这种情况下再次传递通道指针,只会返回服务器内存中的指针地址。客户端收到该地址后,它将尝试指向本地计算机内存中的该地址,不幸的是,该地址可以是任何类型的数据。

如果您想推送一组数据(比如说字符串数组),您可以使用服务器流或双向流。

另一方面,如果您想实现某种稳定且保持活动的连接,您也可以考虑 Websocket。

好了,本文到此结束,带大家了解了《返回类型为channel的go RPC调用》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>