node-2.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "math/big"
  6. "os"
  7. "os/signal"
  8. "strconv"
  9. "time"
  10. chord "trial/achord"
  11. "trial/achord/models"
  12. )
  13. func createNode(id string, addr string, sister *models.Node) (*chord.Node, error) {
  14. cnf := chord.DefaultConfig()
  15. cnf.Id = id
  16. cnf.Addr = addr
  17. cnf.Timeout = 10 * time.Millisecond
  18. cnf.MaxIdle = 100 * time.Millisecond
  19. n, err := chord.NewNode(cnf, sister)
  20. return n, err
  21. }
  22. func createID(id string) []byte {
  23. val := big.NewInt(0)
  24. val.SetString(id, 10)
  25. return val.Bytes()
  26. }
  27. func main() {
  28. id1 := "1"
  29. sister := chord.NewInode(id1, "0.0.0.0:8001")
  30. h, err := createNode("4", "0.0.0.0:8002", sister)
  31. if err != nil {
  32. log.Fatalln(err)
  33. return
  34. }
  35. shut := make(chan bool)
  36. var count int
  37. go func() {
  38. ticker := time.NewTicker(1 * time.Second)
  39. for {
  40. select {
  41. case <-ticker.C:
  42. count++
  43. key := strconv.Itoa(count)
  44. value := fmt.Sprintf(`{"graph_id" : %d, "nodes" : ["node-%d","node-%d","node-%d"]}`, count, count+1, count+2, count+3)
  45. sErr := h.Set(key, value)
  46. if sErr != nil {
  47. log.Println("err: ", sErr)
  48. }
  49. case <-shut:
  50. ticker.Stop()
  51. return
  52. }
  53. }
  54. }()
  55. c := make(chan os.Signal, 1)
  56. signal.Notify(c, os.Interrupt)
  57. <-c
  58. shut <- true
  59. h.Stop()
  60. }