package profile import ( "context" "demo/deliver" "fmt" "time" ) func shmsender(ctx context.Context, s deliver.Deliver, index int) { var err error buf := make([]byte, dLen) copy(buf, []byte("hello, give you this")) for { select { case <-ctx.Done(): s.Close() fmt.Println("quit shm sender") return default: if err = s.Send(buf); err != nil { // s.Close() // url := "hello" // i, err := deliver.NewClientWithError(deliver.Shm, url) // for { // if err == nil { // break // } // time.Sleep(1 * time.Second) // i, err = deliver.NewClientWithError(deliver.Shm, url) // fmt.Println("client create failed : ", err) // } // s = i fmt.Printf("can't send message on push socket: %s\n", err.Error()) } else { fmt.Printf("send msg length %d\n", len(buf)) } } // time.Sleep(10 * time.Millisecond) } } func Shmsend(ctx context.Context, server bool, ipc string, count int) { blocks := 2 if server { s, err := deliver.NewServerWithError(deliver.Shm, ipc, blocks, dLen) for { if err == nil { break } time.Sleep(1 * time.Second) s, err = deliver.NewServerWithError(deliver.Shm, ipc, blocks, dLen) } go shmsender(ctx, s, 0) } else { var cs []deliver.Deliver for i := 0; i < count; i++ { c, err := deliver.NewClientWithError(deliver.Shm, ipc) for { if err == nil { break } time.Sleep(1 * time.Second) c, err = deliver.NewClientWithError(deliver.Shm, ipc) } cs = append(cs, c) go shmsender(ctx, c, i) } } }