如何在 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
}

我面临两个问题:

  1. store.GetStories 正在同时从多个 goroutine 调用,但是 rpc.Client 按顺序处理请求,那么构建 dbClient 的最佳方法是什么,这样我就能够处理 100 个并发请求 store.GetStories?
  2. 每当我重新启动 rpc 服务器时 dbClient.client 断开连接并 dbClient.client。调用给出错误 rpc.ErrShutDown。那么,检查连接和重新连接的最优化方法是什么?我有一个轮询goroutine,寻找更多想法

最简单的解决方案是使用根据您的用例制定的方法:https://golang.org/pkg/net/rpc/#Client.Go