Golang goroutines 共享 RPC 连接

Posted

技术标签:

【中文标题】Golang goroutines 共享 RPC 连接【英文标题】:Golang goroutines sharing RPC connection 【发布时间】:2014-07-31 02:51:13 【问题描述】:

我有一个 Golang 服务器,它使用专用的 goroutine 服务入站请求。这些 goroutine 将使用 rpc/gob 访问另一个后端 go 服务器。如果重用连接以使 Gob 更好地工作(请求共享连接可以重用元数据而不重新发送,也可以节省 TCP 启动的时间),我正在考虑实现连接池类似的机制(如 mysql 客户端池),但在此之前我错过了什么重要的事情吗?

任何 Go 特定的方式来处理这种共享 RPC 客户端? 或者有什么项目可以处理这种情况?

【问题讨论】:

【参考方案1】:

参见https://github.com/valyala/gorpc - 这个库在 RPC 优化方面更进一步 - 它使用独立的读写循环、消息批处理和压缩。与 net/rpc 相比,它的 API 也简单得多。

在实际生产项目中从基于 http 的 rpc 切换到 gorpc 可以将 RPC 网络带宽从 300Mbit/s 减少到 24Mbit/s。

【讨论】:

虽然内置池对我来说简单足够,可能还有更多官方支持,但我还是很有兴趣尝试这个。谢谢,@valyala ehsun7b.wixsite.com/golang/blog/…【参考方案2】:

经过一番调查,我发现内置客户端库中已经完成了池机制,基于 http://golang.org/src/pkg/net/rpc/client.go 的代码,但如果有人可以与我分享更多见解,我仍然很感兴趣。

【讨论】:

以上是关于Golang goroutines 共享 RPC 连接的主要内容,如果未能解决你的问题,请参考以下文章

Golang Context 包详解

Golang入门到项目实战 golang并发变成之通道channel

[Go] golang的竞争状态

个人对Golang中并发理解

Golang channel

[golang] channel通道