package service_register import ( "fmt" "github.com/samuel/go-zookeeper/zk" "net" "os" "time" ) func main() { go starServer("127.0.0.1:8897") go starServer("127.0.0.1:8898") go starServer("127.0.0.1:8899") a := make(chan bool, 1) <-a } func GetServerConnect() (conn *zk.Conn, err error) { zkList := []string{"localhost:2181"} conn, _, err = zk.Connect(zkList, 10*time.Second) if err != nil { fmt.Println(err) } return } func starServer(port string) { tcpAddr, err := net.ResolveTCPAddr("tcp4", port) if err != nil { fmt.Println(err.Error()) } listener, err := net.ListenTCP("tcp", tcpAddr) if err != nil { fmt.Println(err.Error()) } //注册zk节点q // 链接zk GetConnect() conn, err := GetConnect() if err != nil { fmt.Printf(" connect zk error: %s ", err) } defer conn.Close() // zk节点注册 RegistServer() err = RegistServer(conn, port) if err != nil { fmt.Printf(" regist node error: %s ", err) } for { conn, err := listener.Accept() if err != nil { fmt.Fprintf(os.Stderr, "Error: %s", err) continue } go handleCient(conn, port) } } func handleCient(conn net.Conn, port string) { defer conn.Close() daytime := time.Now().String() conn.Write([]byte(port + ": " + daytime)) } func RegistServer(conn *zk.Conn, host string) (err error) { _, err = conn.Create("/go_servers/"+host, nil, zk.FlagEphemeral, zk.WorldACL(zk.PermAll)) return }