server.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package service_register
  2. import (
  3. "fmt"
  4. "github.com/samuel/go-zookeeper/zk"
  5. "net"
  6. "os"
  7. "time"
  8. )
  9. func main() {
  10. go starServer("127.0.0.1:8897")
  11. go starServer("127.0.0.1:8898")
  12. go starServer("127.0.0.1:8899")
  13. a := make(chan bool, 1)
  14. <-a
  15. }
  16. func GetServerConnect() (conn *zk.Conn, err error) {
  17. zkList := []string{"localhost:2181"}
  18. conn, _, err = zk.Connect(zkList, 10*time.Second)
  19. if err != nil {
  20. fmt.Println(err)
  21. }
  22. return
  23. }
  24. func starServer(port string) {
  25. tcpAddr, err := net.ResolveTCPAddr("tcp4", port)
  26. if err != nil {
  27. fmt.Println(err.Error())
  28. }
  29. listener, err := net.ListenTCP("tcp", tcpAddr)
  30. if err != nil {
  31. fmt.Println(err.Error())
  32. }
  33. //注册zk节点q
  34. // 链接zk GetConnect()
  35. conn, err := GetConnect()
  36. if err != nil {
  37. fmt.Printf(" connect zk error: %s ", err)
  38. }
  39. defer conn.Close()
  40. // zk节点注册 RegistServer()
  41. err = RegistServer(conn, port)
  42. if err != nil {
  43. fmt.Printf(" regist node error: %s ", err)
  44. }
  45. for {
  46. conn, err := listener.Accept()
  47. if err != nil {
  48. fmt.Fprintf(os.Stderr, "Error: %s", err)
  49. continue
  50. }
  51. go handleCient(conn, port)
  52. }
  53. }
  54. func handleCient(conn net.Conn, port string) {
  55. defer conn.Close()
  56. daytime := time.Now().String()
  57. conn.Write([]byte(port + ": " + daytime))
  58. }
  59. func RegistServer(conn *zk.Conn, host string) (err error) {
  60. _, err = conn.Create("/go_servers/"+host, nil, zk.FlagEphemeral, zk.WorldACL(zk.PermAll))
  61. return
  62. }