如何在 golang 中管理 rpc.Client
How to manage rpc.Client in golang
我有一个包店如下。
package store
type dbClient struct {
client rpc.Client
}
func init() {
// init dbClient
}
type Args struct{}
type Reply struct{
Stories []interface{}
}
func GetStories() ([]interface{}, error) {
args := Args{}
var reply Reply
err := dbClient.client.Call("Database.GetStories", &Args, &reply)
return reply.Stories, err
}
我面临两个问题:
- store.GetStories 正在同时从多个 goroutine 调用,但是 rpc.Client 按顺序处理请求,那么构建 dbClient 的最佳方法是什么,这样我就能够处理 100 个并发请求 store.GetStories?
- 每当我重新启动 rpc 服务器时 dbClient.client 断开连接并 dbClient.client。调用给出错误 rpc.ErrShutDown。那么,检查连接和重新连接的最优化方法是什么?我有一个轮询goroutine,寻找更多想法
最简单的解决方案是使用根据您的用例制定的方法:https://golang.org/pkg/net/rpc/#Client.Go
我有一个包店如下。
package store
type dbClient struct {
client rpc.Client
}
func init() {
// init dbClient
}
type Args struct{}
type Reply struct{
Stories []interface{}
}
func GetStories() ([]interface{}, error) {
args := Args{}
var reply Reply
err := dbClient.client.Call("Database.GetStories", &Args, &reply)
return reply.Stories, err
}
我面临两个问题:
- store.GetStories 正在同时从多个 goroutine 调用,但是 rpc.Client 按顺序处理请求,那么构建 dbClient 的最佳方法是什么,这样我就能够处理 100 个并发请求 store.GetStories?
- 每当我重新启动 rpc 服务器时 dbClient.client 断开连接并 dbClient.client。调用给出错误 rpc.ErrShutDown。那么,检查连接和重新连接的最优化方法是什么?我有一个轮询goroutine,寻找更多想法
最简单的解决方案是使用根据您的用例制定的方法:https://golang.org/pkg/net/rpc/#Client.Go