clent.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package service_register
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/samuel/go-zookeeper/zk"
  6. "io/ioutil"
  7. "math/rand"
  8. "net"
  9. "time"
  10. )
  11. func main() {
  12. for i := 0; i < 100; i++ {
  13. startClient()
  14. time.Sleep(1 * time.Second)
  15. }
  16. }
  17. func startClient() {
  18. // service := "127.0.0.1:8899"
  19. //获取地址
  20. serverHost, err := getServerHost()
  21. if err != nil {
  22. fmt.Printf("get server host fail: %s \n", err)
  23. return
  24. }
  25. fmt.Println("connect host: " + serverHost)
  26. tcpAddr, err := net.ResolveTCPAddr("tcp4", serverHost)
  27. if err != nil {
  28. fmt.Println(err.Error())
  29. }
  30. conn, err := net.DialTCP("tcp", nil, tcpAddr)
  31. if err != nil {
  32. fmt.Println(err.Error())
  33. }
  34. defer conn.Close()
  35. _, err = conn.Write([]byte("timestamp"))
  36. if err != nil {
  37. fmt.Println(err.Error())
  38. }
  39. result, err := ioutil.ReadAll(conn)
  40. if err != nil {
  41. fmt.Println(err.Error())
  42. }
  43. fmt.Println(string(result))
  44. return
  45. }
  46. func getServerHost() (host string, err error) {
  47. conn, err := GetConnect()
  48. if err != nil {
  49. fmt.Printf(" connect zk error: %s \n ", err)
  50. return
  51. }
  52. defer conn.Close()
  53. serverList, err := GetServerList(conn)
  54. if err != nil {
  55. fmt.Printf(" get server list error: %s \n", err)
  56. return
  57. }
  58. count := len(serverList)
  59. if count == 0 {
  60. err = errors.New("server list is empty \n")
  61. return
  62. }
  63. //随机选中一个返回
  64. r := rand.New(rand.NewSource(time.Now().UnixNano()))
  65. host = serverList[r.Intn(3)]
  66. return
  67. }
  68. func GetConnect() (conn *zk.Conn, err error) {
  69. zkList := []string{"localhost:2181"}
  70. conn, _, err = zk.Connect(zkList, 10*time.Second)
  71. if err != nil {
  72. fmt.Println(err)
  73. }
  74. return
  75. }
  76. func GetServerList(conn *zk.Conn) (list []string, err error) {
  77. list, _, err = conn.Children("/go_servers")
  78. return
  79. }