(method string, args interface{}, reply interface{})
| 29 | } |
| 30 | |
| 31 | func (p *Proxy) Call(method string, args interface{}, reply interface{}) error { |
| 32 | var client *rpc.Client |
| 33 | var addr string |
| 34 | idx := rand.Int31n(int32(len(p.clients))) |
| 35 | var i int32 |
| 36 | p.mutex.Lock() |
| 37 | for a, c := range p.clients { |
| 38 | if i == idx { |
| 39 | client = c |
| 40 | addr = a |
| 41 | break |
| 42 | } |
| 43 | i++ |
| 44 | } |
| 45 | p.mutex.Unlock() |
| 46 | |
| 47 | fmt.Println("use", addr) |
| 48 | return client.Call(method, args, reply) |
| 49 | } |
| 50 | |
| 51 | func (p *Proxy) Connect() { |
| 52 | c, _, err := zk.Connect([]string{p.zookeeper}, time.Second) //*10) |