//Select returns a rpc client func (s *EtcdClientSelector) Select(clientCodecFunc rpcx.ClientCodecFunc, options ...interface{}) (*rpc.Client, error) { if s.SelectMode == rpcx.RandomSelect { s.currentServer = s.rnd.Intn(s.len) server := s.Servers[s.currentServer] fmt.Printf("server: %s\n\n", server) ss := strings.Split(server, "@") //tcp@ip , tcp4@ip or tcp6@ip return rpcx.NewDirectRPCClient(s.Client, clientCodecFunc, ss[0], ss[1], s.timeout) } else if s.SelectMode == rpcx.RandomSelect { s.currentServer = (s.currentServer + 1) % s.len //not use lock for performance so it is not precise even server := s.Servers[s.currentServer] ss := strings.Split(server, "@") // return rpcx.NewDirectRPCClient(s.Client, clientCodecFunc, ss[0], ss[1], s.timeout) } else if s.SelectMode == rpcx.ConsistentHash { if s.HashServiceAndArgs == nil { s.HashServiceAndArgs = JumpConsistentHash } s.currentServer = s.HashServiceAndArgs(s.len, options) server := s.Servers[s.currentServer] ss := strings.Split(server, "@") // return rpcx.NewDirectRPCClient(s.Client, clientCodecFunc, ss[0], ss[1], s.timeout) } return nil, errors.New("not supported SelectMode: " + s.SelectMode.String()) }
//Select returns a rpc client func (s *MultiClientSelector) Select(clientCodecFunc rpcx.ClientCodecFunc, options ...interface{}) (*rpc.Client, error) { if s.SelectMode == rpcx.RandomSelect { s.currentServer = s.rnd.Intn(s.len) pair := s.Servers[s.currentServer] return rpcx.NewDirectRPCClient(s.Client, clientCodecFunc, pair.Network, pair.Address, s.timeout) } else if s.SelectMode == rpcx.RoundRobin { s.currentServer = (s.currentServer + 1) % s.len //not use lock for performance so it is not precise even pair := s.Servers[s.currentServer] return rpcx.NewDirectRPCClient(s.Client, clientCodecFunc, pair.Network, pair.Address, s.timeout) } else if s.SelectMode == rpcx.ConsistentHash { if s.HashServiceAndArgs == nil { s.HashServiceAndArgs = JumpConsistentHash } s.currentServer = s.HashServiceAndArgs(s.len, options...) pair := s.Servers[s.currentServer] return rpcx.NewDirectRPCClient(s.Client, clientCodecFunc, pair.Network, pair.Address, s.timeout) } return nil, errors.New("not supported SelectMode: " + s.SelectMode.String()) }